仅在文件不存在时重写

时间:2013-10-15 12:32:15

标签: apache mod-rewrite

我有一个.htaccess文件,如下所示:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php [NC,L]

我的网页目录中有这个文件。如果有文件,有没有办法强制这条规则停止重写?

例如:我有一个css / style.css文件,但服务器返回404,因为mod_rewrite规则有效。如果我关闭mod_rewrite,则找到该文件。

2 个答案:

答案 0 :(得分:7)

是的,有:

<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} -f [OR]
  RewriteCond %{REQUEST_FILENAME} -d
  RewriteRule ^(.+) - [PT,L]

  RewriteRule ^assets/(.*)$ public/assets/$1 [L]
</IfModule>

第一个条件块和第一个规则适用于现有文件和文件夹,第二个规则适用于在没有文件或文件夹时应该发生的实际重写。

答案 1 :(得分:7)

信用转到http://amandine.aupetit.info/135/apache2-mod_rewrite/

对于虚拟主机,%{REQUEST_FILENAME}与文件系统相关的文件路径不匹配,因此您必须使用:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d

或使用!-f的等效语法,无论您喜欢哪种语法。