ディレクトリから「パブリック」ディレクトリは、あなたのウェブサイトのドキュメントルートであるように見えます。だから、そこに.htaccessファイルを置きます。
これはどれもテストされていません。しかし、これはあなたを地面から離れるはずです。私はこれを達成するためにmod_rewriteを使用します。このようなものは、あなたの.htaccessファイルに入るはずです。
RewriteEngine On
RewriteRule ^user/(.+)$ user/profile.php?username=$1 [R,L]
これは問題を解決するはずです。 [R]
フラグを指定すると、Apache HTTPDはブラウザに新しいURLのリダイレクトと訪問を要求します。ユーザーが何も知らなくてもリダイレクトを内部にしたい場合は、[R,L]
フラグを使用しないでください。
これが言えば、これは私が実際にやる方法です。
RewriteEngine On
# Canonicalize /user/foo to /user/foo/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profile/([^/]+)$ /profile/$1/ [R=301,L]
# Map /user/foo/ to foo's profile
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profile/([^/]+)/$ profile/index.php?p=$1 [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
とRewriteCond %{REQUEST_FILENAME} !-d
は、ユーザーがサーバーに存在する有効なファイルやフォルダであるリソースに対して要求したとき、ちょうど気にしないことを確認するだろうについてのすべてのこれらのリダイレクトのルール、先に行くと、そのファイルまたはフォルダをすぐに提供してください。
最初のRewriteRule
は、ユーザーが後続のスラッシュを忘れてしまった場合、ブラウザがスラッシュを含むURLにリダイレクトするようブラウザに要求します。これは、Apache HTTPDが(おそらくmod_dirのために)デフォルトで動作する方法であり、ここでも同様の動作を維持しようとします。
第2のRewriteRule
は、http://example.com/user/foo/
へのリクエストが有効なURLであることを確認しますが、http://example.com/user/foo/bar/
ではありません。 [QSA]
フラグを使用すると、URLに追加されたすべてのパラメータが確実に保持されます。
[QSA]
フラグがない場合、http://example.com/user/foo/?ref=related+articles
は内部でhttp://example.com/user/profile.php?user=foo
にリダイレクトされます。そのフラグで、私は好きなものにhttp://example.com/user/profile.php?user=foo&ref=related+articles
にリダイレクトされます。
ありがとう、ちょうど私が必要なもの! :D – Hraffnir