tar*_*eld 3 php .htaccess mod-rewrite
如果我使用:
RewriteEngine On
RewriteRule ^.* controller.php
Run Code Online (Sandbox Code Playgroud)
它会将所有请求发送到controller.php但是如果controller.php包含一个css文件(/assets/css/main.css)那么它将无法工作,因为当浏览器调用它时,它只会重定向到controller.php
有没有办法解决这个问题?
您可以添加条件以排除可以映射到实际现有文件的URL:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* controller.php
Run Code Online (Sandbox Code Playgroud)
该-f关键字将测试是否在绝对路径%{REQUEST_FILENAME}是在文件系统中现有的常规文件的路径和!-f方式是相反的.
但是,如果您有要排除的固定目录列表,则还可以执行以下操作:
RewriteCond $0 !^(assets|foo|bar)/
RewriteRule ^.* controller.php
Run Code Online (Sandbox Code Playgroud)
这个条件测试整个RewriteRule模式(引用$0)的匹配是否既不assets/是foo/也不是也不是bar/.如果您不想处理匹配,您也可以直接在RewriteRule指令中使用否定表达式:
RewriteRule !^(assets|foo|bar)/ controller.php
Run Code Online (Sandbox Code Playgroud)