1

mod_rewrite を使用して別の URL を提供しようとしていますが、何を試してもうまくいきません。

URL の例は http://www.site.com/country/tours/dynamic-part/?&city=new-york,los-angelesです。

そして、.htaccessを使用してURLを次のように変更しようとしています:

http://www.site.com/country/tours/dynamic-part/new-york,los-angeles

RewriteEngine on
RewriteBase /

RewriteCond %{QUERY_STRING} (^|&)city=([^&]*)(&|$)
RewriteRule ^country\/tours\/([a-zA-Z0-9]*)\/.+city=([^\/]*)$ http://www.site.com/country/tours/$1/$2 [L,R=301]

RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

何か案は?私は近くにいましたが、もうそうではありません:/

4

1 に答える 1

2

RewriteRule はクエリ文字列と一致しません。http://httpd.apache.org/docs/current/mod/mod_rewrite.html#what_is_matched を参照して ください。

したがって、.+cityルールの一部が一致することはありません。

これはうまくいくはずです...

RewriteCond %{QUERY_STRING} (^|&)city=([^&]*)(&|$)
RewriteRule ^country\/tours\/([a-zA-Z0-9]*)\/ http://www.site.com/country/tours/$1/%2 [L,R=301]

置換は、RewriteCond パターンへの後方参照を読み取ることができます。

于 2012-11-20T11:13:28.643 に答える