我有以下问题已经解决了几十次,但我找不到任何解决方案。
我正在编写一个博客引擎,想要拥有漂亮的URL,所以我在.htaccess
中使用Apache mod_rewrite
。像/page/3 => /?s=3
这样的东西工作得很好,因为我可以在PHP脚本中编写漂亮的URL。但是我有一个表单字段,用于使用 method="get"
进行搜索,所以我别无选择,只能将客户端指向丑陋的 URL。所以我想要的是一种Redirect
客户端,然后Rewrite
服务器的 URL:/?q=foo =client=> /search/foo =server=> /?q=foo
.(也/?q=foo&s=2
=> /search/2/foo
)
不知何故,我的规则不起作用,我希望你能帮助我。
RewriteRule ^(index.php)??q=(.*)$ search/$2 [R,L]
RewriteRule ^(index.php)??q=(.*)&s=(.*)$ search/$3/$2 [R,L]
RewriteRule ^search/(d+)/(.*)/?$ index.php?q=$2&s=$1 [NC,L]
RewriteRule ^search/([^/]*)/?$ index.php?q=$1 [NC,L]
您只需要在实际请求是针对丑陋的 URL 时才需要重定向,您无法与 URI 匹配,因为它会循环:请求丑陋的 URL,重定向到友好 URL,请求友好 URL,内部重写为丑陋的 URI,重定向到友好 URL 等
所以试试这个而不是你的煎炸两个规则:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /(index.php)??q=([^&]+)&s=([^ ]+)
RewriteRule ^ /search/%3/%2/? [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /(index.php)??q=([^ &]+)
RewriteRule ^ /search/%2/? [L,R=301]