.htaccess重写规则跳转后报404 如何配置URL映射到指定PHP页面
<IfModule mod_headers.c> Header always append X-Frame-Options ALLOWALL </IfModule> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 原有HTTP转HTTPS规则保留 RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] Header always set Content-Security-Policy "upgrade-insecure-requests;" # 规则1:旧URL 301跳转到新美化URL,避免重复收录 RewriteCond %{QUERY_STRING} ^p=11$ RewriteRule ^myapp\.php$ /myapp/my-technical-effort [QSD,R=301,L] # 规则2:新URL内部重写到实际处理脚本,用户地址栏不变 RewriteRule ^myapp/my-technical-effort$ /myapp.php?p=11 [L] </IfModule>
规则说明
- 你之前只配置了旧URL跳新URL的单向规则,没有加新URL到实际脚本的内部重写逻辑,所以服务器找不到
/myapp/my-technical-effort对应的实体文件,返回404错误。 - 新增的第二条规则没有加
R标记,属于服务器内部重写,用户浏览器地址栏会保持新的美化URL,不会暴露实际的PHP接口地址。 QSD标记会在跳转旧URL的时候丢弃原有查询参数,避免新URL后面带上?p=11。- 规则顺序不能调换,需要先处理旧URL跳转,再处理新URL的内部重写,否则会出现循环重定向问题。
测试注意
修改完配置后需要清空浏览器缓存再测试,之前的301永久重定向会被浏览器本地缓存,可能会影响测试结果。
内容的提问来源于stack exchange,提问作者SajjadPK
相关产品推荐
相关产品推荐

