1

.htaccessに次のコードがあります。

RewriteEngine On
RewriteRule ^/(\w+)/?$ /?user=$1

http://domain.com/?user=usernamehttp://domain.com/usernameに書き直そうとし ています。残念ながら、このコードは何も書き換えません。助けてください

注:チェックphpinfo()すると、mod_rewriteがロードされます。

アップデート

http://facebook.com/usernameのようなURLからユーザー名を取得する必要があります。ただし、このコードはルートフォルダー内のすべてのフォルダーを書き換えるため、/cssフォルダーはhttp://domain.com/css/?u=commonになります。このコードを許可する方法は、http://domain.com/index.phpでのみ機能します

4

2 に答える 2

1

あなたがしている間違いは/、行頭での使用です^/(\w+)/?$

書き換えルール/は、一致するパターンの先頭.htaccessとディレクトリコンテキストを取り除きます。

これを試してみてください:

RewriteEngine On
RewriteRule ^(\w+)/?$ /?user=$1

RewriteRuleディレクティブドキュメントから:

何が一致しますか?

VirtualHostコンテキストでは、パターンは最初に、ホスト名とポートの後、クエリ文字列の前のURLの部分(「/app1/index.html」など)と照合されます。

ディレクトリとhtaccessのコンテキストでは、サーバーを現在のRewriteRuleに導くプレフィックス(ディレクティブの場所に応じて「app1 / index.html」または「index.html」など)を削除した後、パターンは最初にファイルシステムパスと照合されます。定義済み)。

ホスト名、ポート、またはクエリ文字列と照合する場合は、それぞれ%{HTTP_HOST}、%{SERVER_PORT}、または%{QUERY_STRING}変数でRewriteCondを使用します。


編集:OPの要求に従って更新された回答:これを追加:

RewriteEngine On

#do nothig if URL is trying to access the folder CSS.
RewriteRule *css/* - [L]

#checks where the URL is a valid file/folder.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\w+)/?$ /?user=$1
于 2012-08-07T13:56:15.387 に答える
1

あなたはそれを正しい方法でやっていると思いますが、それを間違った方法で説明しました!

テストに渡されたURLにイニシャル/が含まれていないため、イニシャル/が不要な問題ですか?

RewriteRule ^(\ w +)/?$ /?u =$1である必要があると思います

また、ループが発生しないように注意してください。

于 2012-08-07T13:56:15.747 に答える