.htaccessでmod_rewriteとmod_alias(リダイレクト301)を一緒に使用しますか?
-
27-10-2019 - |
質問
私は、CMSに入れられた古い.htmlと.phpページのセットを備えたサイトを持っています。
現在、.htaccessファイルには、次の形式で約30のmod_aliasリダイレクトがあります。
redirect 301 /oldpage1.html http://www.example.com/newpage1.php
redirect 301 /oldpage2.php http://www.example.com/newpage2.php
redirect 301 /oldpage3.php http://www.example.com/newpage3.php
しかし、私たちはmod_rewriteを使用して、私たちのCMSにかなりのURLを持つことを望んでいます。 http://www.example.com/pagename.php
, 、そのため、次のこともあります。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1
現時点では両方とも一緒に適用されているため、以下は次のとおりです。
http://www.example.com/newpage1.php?page=oldpage1.html
MOD_ALIAS Redirect 301ステートメントによって一致が行われていない場合にのみ、書き換えルールを適用するにはどうすればよいですか。
http://www.example.com/oldpage1.html
- > - >にリダイレクトしますhttp://www.example.com/newpage1.php
- > - >として扱われますhttp://www.example.com/index.php?page=/newpage1.php
ヒントは非常に高く評価されていますか?ありがとう。
解決
私はaで答えを見つけました mod_rewriteとmod_aliasの素晴らしい説明
問題は、mod_rewriteが常にmod_aliasの前に発生し、順序に関係なく.htaccessに配置されることです。これは、この状況に必要な順序の逆です。
トリックは使用することです RewriteRule [R=301]
それ以外の redirect 301
, 、したがって、mod_wrewriteをmod_aliasと混合する代わりに、すべてにmod_rewriteを使用します。
完全な解決策は次のとおりです。
RewriteEngine on
RewriteBase /
RewriteRule ^oldpage1.html /newpage1.php [R=301,L]
RewriteRule ^oldpage2.php /newpage2.php [R=301,L]
RewriteRule ^oldpage3.php /newpage3.php [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1