Apache2 mod_rewrite规则匹配失败求助
Apache2 mod_rewrite规则匹配失败求助
兄弟,我仔细看了你的RewriteTrace日志和当前的规则,马上就找到问题根源了!
先看日志里的关键行:
[perdir /var/www/192.168.178.29/] applying pattern '^/wiki-search/(.+)$' to uri 'wiki-search/john'
看到没?Apache在处理目录级(per-directory)的Rewrite规则时,会自动去掉请求的目录前缀,所以传入规则匹配的URI是没有开头斜杠的——你这里要匹配的URI是wiki-search/john,但你的规则写的是^/wiki-search/(.+)$,开头多了个/,自然匹配不上!
修正后的规则
把你的RewriteRule改成下面这样就行:
RewriteCond %{REQUEST_METHOD} ^(GET)$ RewriteRule ^wiki-search/(.+)$ NicerAppWebOS/index.php?app-wikipedia.org-search=$1 [L,END,PT,DPI]
或者如果想兼容可能的边缘场景(比如某些特殊配置下可能带斜杠),可以写成:
RewriteCond %{REQUEST_METHOD} ^(GET)$ RewriteRule ^/?wiki-search/(.+)$ NicerAppWebOS/index.php?app-wikipedia.org-search=$1 [L,END,PT,DPI]
这里的^/?表示开头可以有0个或1个斜杠,保证两种情况都能匹配。
再给你理一遍日志里的逻辑
Apache处理请求时的步骤:
- 给路径添加信息后缀:
/var/www/192.168.178.29/wiki-search→/var/www/192.168.178.29/wiki-search/john - 去掉目录前缀:
/var/www/192.168.178.29/wiki-search/john→wiki-search/john - 用你的规则
^/wiki-search/(.+)$去匹配wiki-search/john,因为开头没有斜杠,匹配失败
最后提醒
修改完规则后,记得执行systemctl reload apache2重新加载配置,再测试你的搜索功能应该就能正常工作了!
备注:内容来源于stack exchange,提问作者NicerApp_WebOS
相关产品推荐
相关产品推荐

