如何在wp-content的.htaccess中放行指定PHP文件frontend.css.php?
解决wp-content目录下放行特定PHP文件的.htaccess配置方案
这个问题的核心在于Apache的规则执行顺序——它是从上到下匹配规则的,所以我们需要先放行目标文件,再禁止其他PHP文件,这样就能实现你的需求。
具体配置步骤
- 找到wp-content目录下的
.htaccess文件(如果没有就新建一个),或者如果你的安全规则是写在根目录.htaccess里的,就修改根目录的文件。 - 在所有禁止PHP访问的规则之前,添加允许
frontend.css.php的规则:
# 放行指定的动态CSS PHP文件 <FilesMatch "frontend\.css\.php$"> Require all granted </FilesMatch>
- 接着保留你原来的禁止规则,比如:
# 禁止wp-content下所有其他PHP文件访问 <FilesMatch "\.php$"> Require all denied </FilesMatch>
为什么这样有效?
当用户请求wp-content/my-theme/assets/dynamic/frontend.css.php时,Apache会先匹配第一个FilesMatch规则,发现文件名符合,就直接允许访问,后面的禁止规则就不会再触发了。而其他PHP文件会被第二个规则拦截。
兼容旧版Apache(2.2及以下)的写法
如果你的服务器用的是Apache 2.2或更早版本,需要用旧的授权语法:
<FilesMatch "frontend\.css\.php$"> Order Deny,Allow Allow from all </FilesMatch> <FilesMatch "\.php$"> Order Allow,Deny Deny from all </FilesMatch>
额外注意事项
- 如果你是在根目录
.htaccess里配置,最好把规则限定在wp-content目录下,避免影响其他目录:
<Directory "/你的网站绝对路径/wp-content"> # 先放行目标文件 <FilesMatch "frontend\.css\.php$"> Require all granted </FilesMatch> # 禁止其他PHP <FilesMatch "\.php$"> Require all denied </FilesMatch> # 保留你原来允许的静态资源类型(比如图片、CSS、JS等) <FilesMatch "\.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot)$"> Require all granted </FilesMatch> # 最后禁止所有未被允许的文件 Require all denied </Directory>
- 配置完成后,记得测试:直接访问
frontend.css.php的URL,确认能正常加载;再随便找个wp-content里的其他PHP文件(比如wp-content/plugins/xxx.php),确认会被禁止访问。
内容的提问来源于stack exchange,提问作者Awman
相关产品推荐
相关产品推荐

