1

htaccess を使用して単一ページのリダイレクトを設定する際に問題が発生しています。現在、次のhtaccessファイルがあります。

RewriteCond %{SCRIPT_FILENAME} !-s
RewriteRule (.*) index.php?path=$1 [QSA,L]

次に、一連のリダイレクトなど

Redirect 301 /oldpage.htm http://www.mydomain.com/new-page

しかし、私が抱えている問題は、ブラウザーに移動して古い URL を入力すると、パラメーターが添付された URL にリダイレクトされることです。

"http://www.mydomain.com/new-page?path=oldpage.htm"

私のリダイレクトの一部では、これはとにかく機能しているように見えますが、404 エラーが発生するものもあります。また、RewriteCond と Rewrite Rule を使用して、可能なページのより一般的なキャッチすべてのリダイレクトを記述しようとしましたが、同じ問題が発生しています。

他のルールが私のリダイレクトを妨害しているに違いないと考えています - 私が見ることができる唯一のルールは上記のルールですが、そうであればリダイレクトされた URL は最終的に

"http://www.mydomain.com/index.php?path=oldpage.htm"

パラメータがURLに追加されている理由と、リダイレクトが機能するようにこれを停止する方法を誰かが説明できますか?

乾杯!

4

2 に答える 2

0

これは、mod_alias(Redirectディレクティブ)とmod_rewrite(Rewrite*ディレクティブ)の両方が、URLファイルマッピング処理パイプラインの同じURIに適用されているためです。これを防ぐために、この場合はどちらか一方に固執する必要があります。

また、リダイレクトを最初に適用する必要があります。

RewriteRule ^/?oldpage.htm$ http://www.mydomain.com/new-page [L,R=301]

RewriteCond %{SCRIPT_FILENAME} !-s
RewriteRule (.*) index.php?path=$1 [QSA,L]

あなたのindex.phpルールは、シンボリックリンクであるCGIスクリプトではないすべてのリクエストをキャッチするので、それが本当にあなたの意図であるなら、ほとんどすべてです。それ以外の場合は、次のものを含めることで、合法的なリクエストを無傷で取得できます。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

最後のルールの上。

于 2012-10-03T17:52:38.347 に答える
0

あなたの $1 in rewrite ルールのため

RewriteRule (.*) index.php [QSA,L] これを試してください

于 2012-10-03T11:13:15.557 に答える