質問

私は、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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top