使用mod_rewrite重定向客户端的客户端和重写服务器的 URL



我有以下问题已经解决了几十次,但我找不到任何解决方案。

我正在编写一个博客引擎,想要拥有漂亮的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]

最新更新