0

私はこの RewriteRule を持っています:

RewriteRule !^(div|sitemapXML|cache|AJAX|xml|html|favicon.ico|robots.txt|script|cms|style|image|inc|img|templates|index.html) index.php

ただし、たとえば、「http://www.mydomain.com/divindu/」は「div」が除外されているため無視されます。ここでフォルダを処理する最善の方法は何ですか? 名前の後にスラッシュを付ける必要がありますか?

4

2 に答える 2

2

既存のファイルを無視するキャッチオール ルールを実現しようとしているようです。そのためには、単に Apache の FallbackResource ディレクティブを使用する必要があります。古いバージョンの Apache、またはより詳細な制御については、RewriteCond の特別な -d フラグと -f フラグを調べてください。これらを使用して、既存のファイルとフォルダーを RewriteRule から明示的に除外できます。

于 2013-04-12T19:07:14.270 に答える
2

/通常のファイルまたはディレクトリのタイプに応じて、スラッシュまたは文字列の末尾にドル記号を追加できます$。パターンを a に移動して、RewriteCondディレクトリとファイルを 2 つに分割することもできます

# exclude some directories
RewriteCond %{REQUEST_URI} !^/(div|sitemapXML|cache|AJAX|xml|html|script|cms|style|image|inc|img|templates)/
# exclude some existing files
RewriteCond %{REQUEST_URI} !^/(favicon.ico|robots.txt|index.html)$
RewriteRule ^ index.php [L]

または、@Nielsが想定しているように、既存のすべてのファイルとディレクトリを除外する場合は、次を使用できます

# exclude existing files
RewriteCond %{REQUEST_FILENAME} !-f
# exclude directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
于 2013-04-12T20:42:10.220 に答える