如何设置ThinkPHP伪静态以支持静态图片CSS文件兼容?
- 内容介绍
- 文章标签
- 相关推荐
本文共计691个文字,预计阅读时间需要3分钟。
由于重写规则将所有请求都转到了`index.php`,包括静态资源,因此即使这些资源实际上存在于服务器上,ThinkPHP也不会处理它们,最终返回404错误。
关键不是“要不要放行”,而是“怎么让服务器在转发前就识别出这是真实文件”——靠 RewriteCond(Apache)或 try_files(Nginx)提前拦截。
Apache 下如何跳过真实静态文件?
必须用两个 RewriteCond 判断:当前请求路径既不是目录,也不是真实文件。缺一不可,否则子目录或同名 PHP 文件可能被误放行。
-
RewriteCond %{REQUEST_FILENAME} !-d:排除真实存在的目录(如/uploads/) -
RewriteCond %{REQUEST_FILENAME} !-f:排除真实存在的文件(如/favicon.ico、/static/js/main.js) -
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]:只对不匹配前两者的路径生效
注意:.htaccess 必须放在 public 目录(即 index.php 所在目录),且 Apache 的 AllowOverride 需设为 FileInfo Options 或 All,否则条件判断不执行。
本文共计691个文字,预计阅读时间需要3分钟。
由于重写规则将所有请求都转到了`index.php`,包括静态资源,因此即使这些资源实际上存在于服务器上,ThinkPHP也不会处理它们,最终返回404错误。
关键不是“要不要放行”,而是“怎么让服务器在转发前就识别出这是真实文件”——靠 RewriteCond(Apache)或 try_files(Nginx)提前拦截。
Apache 下如何跳过真实静态文件?
必须用两个 RewriteCond 判断:当前请求路径既不是目录,也不是真实文件。缺一不可,否则子目录或同名 PHP 文件可能被误放行。
-
RewriteCond %{REQUEST_FILENAME} !-d:排除真实存在的目录(如/uploads/) -
RewriteCond %{REQUEST_FILENAME} !-f:排除真实存在的文件(如/favicon.ico、/static/js/main.js) -
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]:只对不匹配前两者的路径生效
注意:.htaccess 必须放在 public 目录(即 index.php 所在目录),且 Apache 的 AllowOverride 需设为 FileInfo Options 或 All,否则条件判断不执行。

