仅在文件不存在时重写

use*_*156 5 apache mod-rewrite

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

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)

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

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

Ili*_*ija 8

就在这里:

<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>
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为现有规则的`RewriteCond%{REQUEST_FILENAME}!-f`和`!-d`会更简单. (9认同)

Yan*_*eul 7

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

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

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d
Run Code Online (Sandbox Code Playgroud)

或者使用它的等效语法!-f,无论你喜欢什么.