禁止直接访问执行脚本:仅允许/news/数字形式伪静态URL访问
解决方案
你可以通过添加拦截规则来禁止直接访问 /news/index.php?post=xxx 这类请求,同时保留伪静态路径的正常解析,完整的 .htaccess 配置如下:
RewriteEngine on # 拦截直接访问带post参数的index.php请求,返回403禁止访问 RewriteCond %{THE_REQUEST} ^GET\ /news/index\.php\?post=([0-9]+) [NC] RewriteRule ^ - [R=403,L] # 伪静态转发规则:将/news/数字路径映射到index.php RewriteRule ^news/([0-9]+)/?$ /news/index.php?post=$1 [L,QSA]
规则说明:
- 第一条规则通过
%{THE_REQUEST}匹配原始请求行,确保只拦截用户直接输入的/news/index.php?post=数字请求,不会干扰伪静态规则的内部转发流程,匹配后返回403状态码禁止访问。 - 若希望用户输入旧地址时自动跳转到伪静态路径(而非直接禁止),可将第一条规则替换为:
这样用户访问旧地址会被301永久重定向到对应伪静态URL,同时有助于搜索引擎更新索引。RewriteCond %{THE_REQUEST} ^GET\ /news/index\.php\?post=([0-9]+) [NC] RewriteRule ^ /news/%1 [R=301,L]
注意事项:
- 确保服务器已开启
mod_rewrite模块。 - 拦截规则必须放在伪静态规则之前,否则会先触发转发逻辑,无法拦截直接请求。
内容的提问来源于stack exchange,提问作者ganjo ali
相关产品推荐
相关产品推荐

