これは .htaccess ファイルにあります
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
私がやろうとしているのは、この構成に別の RewriteRule を追加して、これらのような古い URL がサイトのルートにリダイレクトされるようにすることです。
http://www.acme.com/category.php?id=6
http://www.acme.com/product.php?id=183&category=
「category.php」と「product.php」が無効な文字列になることはわかっています。例として「category.php」を使用して、構成を次のように変更してみました
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^category.php(.*) / [L,R=301]
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
これにより、次のようにリダイレクトされます
http://www.acme.com/category.php?id=112 -> http://www.acme.com/?id=112
2つの問題があります
- クエリ文字列を追加したくありません。[QSA] を指定していません
- ルートを直接入力すると、
www.acme.com
追加したばかりの行を削除しない限り、ページは表示されません。新しい RewriteRule が「category.php」で始まらない URL に影響するのはなぜですか?
[編集]
上記のリダイレクトの代わりにこれも試しましたが、まだ両方のルールが適用されているようです
RewriteRule ^category.php /holdingPage.php [L]