1

私はこの正規表現コードを持っています:

RewriteCond  %{REQUEST_URI} !/login([/]{0,1}) [NC]
RewriteCond  %{REQUEST_URI} !/search/([/]{0,1}) [NC]
RewriteCond  %{REQUEST_URI} !/search/([^.]+)([/]{0,1}) [NC]

RewriteRule ^([^.]+)/?$ products.php/$1/ [NC,L]
RewriteRule ^([^.]+)/([^.]+)/?$ products.php/$1/$2/ [NC,L]
RewriteRule ^login([/]{0,1})?$ login.php [NC,L]
RewriteRule ^search([/]{0,1})?$ search.php [NC,L]
RewriteRule ^search/([^.]+)/?$ search.php/$1/ [NC,L]

問題は、site/search/asdf 正規表現にアクセスすると、products.php ファイルにリダイレクトされることです。どうすればこれを修正できますか?

4

2 に答える 2

1

{0,1}正規表現を使用する以外に、 :の必要はありません。

RewriteRule ^search/([^.]+)/?$ search.php/$1/ [NC,L]
RewriteRule ^search(/?)?$ search.php [NC,L]
RewriteRule ^login(/?)?$ login.php [NC,L]
RewriteRule ^([^.]+)/([^.]+)/?$ products.php/$1/$2/ [NC,L]
RewriteRule ^([^.]+)/?$ products.php/$1/ [NC,L]

[/]{0,1}とまったく同じ/?です。?意味:「ゼロまたは前の要素の1つ」。

于 2013-01-07T15:26:07.107 に答える
1

RewriteRuleの順序を最も具体的なものから最も具体的でないものに変更することはできませんか:

RewriteRule ^search/([^.]+)/?$ search.php/$1/ [NC,L]
RewriteRule ^search([/]{0,1})?$ search.php [NC,L]
RewriteRule ^login([/]{0,1})?$ login.php [NC,L]
RewriteRule ^([^.]+)/([^.]+)/?$ products.php/$1/$2/ [NC,L]
RewriteRule ^([^.]+)/?$ products.php/$1/ [NC,L]
于 2013-01-07T15:20:40.933 に答える