如果我使用:
RewriteEngine On
RewriteRule ^.* controller.php
它会将所有请求发送到 controller.php 但是如果 controller.php 包含一个 css 文件 (/assets/css/main.css) 那么它就不会工作,因为当浏览器调用它时,它只会重定向到 controller.php
有什么办法可以解决这个问题吗?
最佳答案
您可以添加 condition排除可以映射到实际存在文件的 URL:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* controller.php
-f
关键字将测试 %{REQUEST_FILENAME}
中的绝对路径是否是文件系统中现有常规文件的路径,!-f
正好相反。
但是如果你有一个固定的目录列表你想排除,你也可以这样做:
RewriteCond $0 !^(assets|foo|bar)/
RewriteRule ^.* controller.php
此条件测试整个 RewriteRule
模式(用 $0
引用)的匹配是否既不以 assets/
也不以 开头>foo/
或 bar/
。如果您不想处理匹配项,您也可以直接在 RewriteRule
指令中使用否定表达式:
RewriteRule !^(assets|foo|bar)/ controller.php
关于php - HTAccess-Mod_rewrite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1909834/