1

Ubuntu 12.04 サーバーで mod_rewrite を使用して URL を読みやすくしようとしていますが、画像と css ファイルの例外を追加したいと考えています。

私の入力 URL は に書き直される形式\controller\actionになっていますindex.php?controller=controller&action=action。イメージまたは css ファイルが指定されている場合、URL が書き換えられないように例外を追加したい (たとえば、書き換え\images\image.jpgられない)。

私の .htaccess コードは次のとおりです。

RewriteEngine on
RewriteCond %{REQUEST_URI} !(\.gif|\.jpg|\.png|\.css)$ [NC]
RewriteRule  ^([a-zA-z]+)/([a-zA-z]+)$ test.php?controller=$1&action=$2 [L]
RewriteRule  ^([a-zA-z]+)/([a-zA-z]+)/([^/]*)$ test.php?controller=$1&action=$2&$3 [L]

書き換えコードは正常に動作し、URL は意図したとおりに表示されていますが、画像を要求しても URL はまだ書き換えられています。私の RewriteCond が無視されているようですが、なぜこれが考えられるのかについて何か提案はありますか?

4

2 に答える 2

0

rewriteCondルールは、次のRewriteRuleにのみ適用されます。

したがって、少なくとも2番目のRewriteRuleに対してrewriteCondを繰り返す必要があります。

確かにもっと良いことはありません。たとえば、通常の方法は、URLが実際の静的リソースと一致していることをテストすることです。すべてのphpコードがWebディレクトリの外にある場合(index.phpを除くlibraryディレクトリ内)、ドキュメントルートで直接利用できるすべてのスタイリッシュなリソースは、jsファイル、cssファイル、またはイメージファイルのみです。

したがって、これは通常の方法です。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-z]+)/([a-zA-z]+)$ test.php?controller=$1&action=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule  ^([a-zA-z]+)/([a-zA-z]+)/([^/]*)$ test.php?controller=$1&action=$2&$3 [L]

しかし、これが出発点です。私たちは確かにこれのために2つのルールを実行することを避けるために何かを見つけることができました(多分私は後で見るでしょう)

于 2012-12-10T12:50:48.780 に答える
0

RewriteCond は最初の RewriteRule にのみ適用され、2 番目のルールで再現する必要があります。ただし、既存のものを除外するために、事前に書き換え禁止ルールを追加した方がよいと思います。

# Do nothing for files which physically exist
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

# your MVC rules
RewriteRule  ^([a-zA-z]+)/([a-zA-z]+)$ test.php?controller=$1&action=$2 [L]
RewriteRule  ^([a-zA-z]+)/([a-zA-z]+)/([^/]*)$ test.php?controller=$1&action=$2&$3 [L]
于 2012-12-10T12:52:14.697 に答える