1

Ok、

だから私は2つの主要なmod_rewriteルールを使用しています(または使用しようとしています)、それらは互いに競合しているようです

RewriteRule ^/?help$ index.php?page=help [L]

RewriteRule ^/?([a-zA-Z0-9._-]+)$ index.php?user=$1 [L]

ピリオドを取り除けば - >。2番目のルールでは、ヘルプページが表示され、ユーザーページも表示できますが、ピリオドを追加すると、ヘルプページは表示されず、ユーザーページとして処理されます.

誰にも指針がありますか?

4

2 に答える 2

0

まず、これを .htaccess で行っている場合、mod_rewrite は処理を停止せず、代わりに内部リダイレクトを行います。詳細については、この回答を参照してください。

2 番目の書き換えルールでピリオドをエスケープする必要があります。ピリオド (またはドット) は、エスケープされていない場合、任意の文字と一致します。

固定ルール:

RewriteRule ^/([a-zA-Z0-9\._-]+)$ /index.php?user=$1 [L]

編集3:

コメントと独自の回答に基づいて、更新されたソリューションを次に示します。Apacheでの動作方法は、現在のコンテキストによって異なります。一致するパターンから をRewriteCond %{REQUEST_FILENAME}省略することもできます。?

RewriteRule ^/help$ /index.php?page=help [L]
# If you are inside <VirtualHost> context
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^/([a-zA-Z0-9\._-]+)$ /index.php?user=$1 [L]
# If you are inside <Directory> or .htaccesscontext
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/([a-zA-Z0-9\._-]+)$ /index.php?user=$1 [L]

サーバー上にあるファイルまたはディレクトリと同じ名前のユーザーがいる場合、このソリューションは競合を引き起こすことに注意してください。

于 2012-12-07T10:51:43.603 に答える
0

私は別のユーザーがここで遭遇したことを調べました - Apache / mod_rewrite / Periods messing with pattern、そして彼のルールを修正しました、そしてそれは働いています -

RewriteRule ^/?help$ index.php?page=help [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([a-zA-Z0-9\[\]\.()+|_-]+)$ index.php?user=$1 [L]

返信ありがとうございます。

于 2012-12-07T21:42:17.930 に答える