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

时间:2012-08-17 21:41:55

标签: .htaccess mod-rewrite redirect url-rewriting

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

我正在编写一个博客引擎,希望拥有漂亮的网址,因此我在mod_rewrite中使用了Apache .htaccess。像/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]

1 个答案:

答案 0 :(得分:0)

你只需要在实际请求是针对丑陋的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]