0

次のように RewriteRules を持つ多言語ショップを作成しようとしています。

    RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
    RewriteCond %{REQUEST_FILENAME} -d [NC,OR]
    RewriteCond %{REQUEST_FILENAME} -l [NC]
    RewriteRule .* - [L]
    RewriteRule .*[^/]$                 $0/ [R=301]

    RewriteCond %{HTTP_HOST} ^(www\.)?example\.com\$
    RewriteRule ^(.*)$       $1?language=en [QSA]

    RewriteRule ^catalog/product/([^/]*)/$      catalog/index.php?id=$1  [L,QSA]
    RewriteRule ^catalog/([^/]*)/$          catalog/index.php?category=$1  [L,QSA]

http://example.com/catalog/product/111/ またはhttp://example.com/catalog/category/にアクセスしようとすると、これらのルールは機能しません

ただし、削除すると

    RewriteCond %{HTTP_HOST} ^(www\.)?example\.com\$
    RewriteRule ^(.*)$       $1?language=en [QSA]

すべてがうまく機能します。

何が問題ですか?どうすればこれらのものを連携させることができますか?

4

1 に答える 1

0

ルールの順序を入れ替えて、いくつかのルールの L フラグを取り除く必要があります。これはうまくいくはずです:

RewriteRule ^catalog/product/([^/]*)/      catalog/index.php?id=$1  [QSA,S=1]
RewriteRule ^catalog/([^/]*)/          catalog/index.php?category=$1  [QSA]

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^(.*)$       $1?language=en [QSA]
于 2012-05-29T20:15:39.373 に答える