HTAccess - Mod Rewrite

时间:2009-12-15 19:37:31

标签: php .htaccess mod-rewrite

如果我使用:

RewriteEngine On
RewriteRule ^.* controller.php

它会将所有请求发送到controller.php 但是如果controller.php包含一个css文件(/assets/css/main.css),那么它将无法工作,因为当浏览器调用它时,它只会重定向到controller.php

我有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:6)

您可以添加condition以排除可以映射到实际现有文件的网址:

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

答案 1 :(得分:0)

试试这个:

RewriteEngine On

RewriteCond %{REQUEST_URI} !\.css$
RewriteRule ^.* controller.php

未经测试但应该有效。