使用指定.htaccess规则后生成的URL返回404,如何修复?
修复.htaccess重写后的404错误问题
你当前的.htaccess只实现了旧URL到友好URL的301重定向,但缺少关键的反向解析规则——服务器收到/5paisa-vs-abhipra-capital这类友好URL请求时,会默认寻找对应名称的文件或目录,找不到就返回404。
修复方案
添加一条反向重写规则,把友好URL拆解成后端index.php需要的name1和name2参数,完整代码如下:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 核心修复:将友好URL解析为index.php可识别的参数 RewriteRule ^([^-]+)-vs-([^/]+)$ /index.php?name1=$1&name2=$2 [L] # 旧URL到友好URL的301重定向(保留原有逻辑) RewriteCond %{QUERY_STRING} ^name1=([^&]+)&name2=([^&]+)$ RewriteRule ^$ /%1-vs-%2? [R=301,L] # 其他非文件/目录请求转发到index.php(保留原有逻辑) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
关键规则说明
- 新增的
RewriteRule ^([^-]+)-vs-([^/]+)$ /index.php?name1=$1&name2=$2 [L]:- 正则
^([^-]+)-vs-([^/]+)$精准匹配xxx-vs-xxx格式的URL路径,把xxx分别提取为name1和name2参数 [L]标记表示匹配后不再执行后续规则,直接转发给index.php处理
- 正则
注意事项
- 如果你的
name1或name2本身包含-字符,需要调整正则为^([^/]+)-vs-([^/]+)$,但要确保-vs-是唯一的分隔符 - 测试阶段可将
R=301改为R=302(临时重定向),确认规则生效后再换回永久重定向 - 确保服务器已开启
mod_rewrite模块
内容的提问来源于stack exchange,提问作者Rakesh Kumar
相关产品推荐
相关产品推荐

