2

PHP アプリケーションを開発していますが、Apache と Mod Rewrite に少し問題があります。ここで何が問題なのか誰でも知っていますか?:

RewriteEngine on
RewriteBase /mysite/
RewriteRule ^css\/css\.css css/css.php [L]
RewriteRule ^js\/js\.js js/js.php [L]
RewriteRule !^img\/.* index.php

http://localhost/css/css.cssを入力すると、index.php が表示されます。何かが足りないのかもしれません。URL が最初のルールに一致すると、apache が書き換えプロセスを停止しないのはなぜですか?

'last|L' (最後のルール)

ここで書き換えプロセスを停止し、これ以上書き換えルールを適用しないでください。Perl の last コマンドや C 言語の break コマンドに相当します。このフラグを使用して、現在書き換えられている URL が次のルールによってさらに書き換えられないようにします。たとえば、ルートパス URL (「/」) を実際の URL (「/e/www/」など) に書き換えるために使用します。

3 時間前からフォーラムとドキュメントを読みましたが、まだ同じ問題が発生しています。

前もって感謝します。

4

4 に答える 4

5

Centauro12、問題は、[L] フラグが実際には次のルールによる伝播を停止することですが (.htaccess ファイルにいる場合) URL マッピングが最初からやり直されることです。つまり、すべてのルールが 2 回目に処理されます。詳細については、Apache Rewrite Guideを参照してください。

したがって、書き換えられた php スクリプトの書き換えを明示的に無効にする必要があります。

RewriteRule ^css/css.php - [L]
RewriteRule ^js/js.php - [L]

またはよりコンパクト(おそらくあなたが望むものではないかもしれませんが):

# don't rewrite anything that really exists
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
于 2009-11-23T16:56:28.933 に答える
1

試す

RewriteRule ^/css/css\.css css/css.php [L]
RewriteRule ^/js/js\.js js/js.php [L]
RewriteRule ! /^img/.* index.php

すなわち。パターンを文字列の先頭に固定する場合は、. で開始^します。パターンは、で始まるURL-pathsと照合されます。//

編集

上記は、サーバー構成、仮想ホスト、およびディレクトリコンテキストに対してのみ有効です。コンテキストが .htaccess の場合、最初のスラッシュを含むディレクトリごとのプレフィックスは、ルールが一致する前に取り除かれます (その後、先頭に追加されます)。したがって、^/ここでは必要ありません。

于 2009-11-21T16:10:48.520 に答える
1

私は解決策を見つけました:

RewriteEngine on
RewriteBase /mysite/

RewriteRule ^css\/css\.css css/css.php [L]
RewriteRule ^css\/(.*)$ css/$1 [L]
RewriteRule ^js\/js\.js js/js.php [L]
RewriteRule ^js\/(.*)$ js/$1 [L]
RewriteRule ^img/(.*)$ img/$1 [L]
RewriteRule ^(.*)$ index.php?rewrite=$1 

それはうまく機能しますが、なぜそれが必要なのかわかりません

RewriteRule ^css\/(.*)$ css/$1 [L]

RewriteRule ^js\/(.*)$ js/$1 [L]

誰にでも役立つことを願っています。

ありがとう!:)

于 2009-11-23T16:48:51.007 に答える
0

「^css...」で式を開始する前に、書き換えベースを「/」に設定する必要がある場合があります。

RewriteBase /
于 2009-11-21T16:08:08.120 に答える