.htaccess RewriteRule中含字母'd'的路径触发404问题求助
解决.htaccess RewriteRule含'd'字符触发404的问题
嘿,我太懂这种正则踩坑的感觉了——字符集的写法一不小心就会搞反意思!
你猜对了,问题确实出在([^/d]+)这个正则片段上:
[^...]是否定字符集,意思是「匹配除了括号里列出的所有字符之外的任意字符」- 你写的
[^/d],其实是把「斜杠/」和「字母d」都加入了排除列表,所以只要搜索变量里包含d,这条规则就匹配不上,服务器就会走默认路由返回404了
正确的规则写法
如果你想允许第一个搜索变量是除了斜杠之外的任意字符(包含字母d、数字、符号等),只需要把否定字符集里的d去掉,写成[^/]+即可:
RewriteRule ^/?Search/([^/]+)/([^/]+)/?$ Search.html?searchvariable=$1&searchnumber=$2 [L,QSA]
更严谨的优化(可选)
如果第二个参数searchnumber确实是纯数字的话,你可以把第二个捕获组改成\d+(匹配1个或多个数字),这样能避免非数字的参数进入,规则更精准:
RewriteRule ^/?Search/([^/]+)/(\d+)/?$ Search.html?searchvariable=$1&searchnumber=$2 [L,QSA]
修改后再访问http://example.com/Search/doo/12这类含d的地址,就能正常匹配到搜索页面啦!
内容的提问来源于stack exchange,提问作者lilHar
相关产品推荐
相关产品推荐

