1

一致しない (否定) mod_rewrite パターンを機能させるのに問題があります。

以下の例では、すべてのリクエストを「/promo-page」にリダイレクトしたいのですが、リダイレクト ループを許可しないでください (したがって、RewriteCond)。

### Request URL: http://example.com/promo-page ###
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !/promo-page
RewriteRule .* /promo-page [R=302,L]

「/promo-page」のリクエストが行われると、RewriteCond ルールが無視され、リダイレクト ループが発生します。

感嘆符 (!) が機能しない理由はありますか? 構文が間違っていませんか?

前もって感謝します。

アップデート

オンラインの mod_rewrite テスターでもこれらのルールを試してみましたが、うまくいきません (URL として "home" を使用し、REQUEST_URI として "/home" を使用した場合)。

http://martinmelin.se/rewrite-rule-tester/

4

2 に答える 2

0

削除RewriteCond %{REQUEST_URI} !^/$- Jon が言うように、常に true になります。

于 2012-10-29T05:06:49.580 に答える
0

あなたの答えと考えをありがとう。私は最終的に問題を追跡したので、他の誰かが道をたどるのに役立つことを願って詳細を以下に示します.

状況を混乱させたのは、.htaccess ファイルのさらに下にあるルールです。これらは関連性がなく、結果に影響を与えるとは思わなかったため、元の質問には投稿されませんでした。

これらの追加ルールは、クリーン URL を GET リクエストに書き換えます。%{REQUEST_URI} には、URL の末尾に付けられた GET 変数も含まれているという (誤った) 印象を受けました。そうではありません。%{QUERY_STRING} を使用して、GET クエリ文字列の内容を個別に確認する必要があります。

Mod-Rewrite Logging は、この問題のデバッグに非常に役立ちました。ライブ/プロダクション cPanel サーバーでは有効にできなかったので、PC に XAMPP をインストールし、ログを有効にして、動作するまでローカルで書き換えルールを試しました。

于 2012-11-05T00:28:17.070 に答える