HT Access - Mod Rewrite

3

如果我使用:

RewriteEngine On
RewriteRule ^.* controller.php

它会将所有请求发送到controller.php。但是,如果controller.php包含CSS文件(/assets/css/main.css),那么它将无法工作,因为当浏览器调用它时,它将重定向到controller.php。有没有办法解决这个问题?
2个回答

6
您可以添加一个条件来排除可以映射到实际存在的文件的URL:

您可以添加一个条件,以排除可以映射到实际存在的文件的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

这并不是一个很好的安全案例,因为它允许直接访问已经存在的文件。如果你知道我的意思,这就是一种“安全通过混淆”。 - AbiusX

0

试试这个:

RewriteEngine On

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

未经测试但应该可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接