7

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

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

我的 web 目录中有这个文件。如果有文件,有什么方法可以强制此规则停止重写?

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

4

2 回答 2

11

就在这里:

<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>

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

于 2013-10-15T12:37:00.020 回答
9

归功于http://amandine.aupetit.info/135/apache2-mod_rewrite/

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

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

或者它的等效语法 using !-f,无论你喜欢哪个。

于 2016-09-19T21:40:50.173 回答