0

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

我正在写一个博客引擎,希望有漂亮的 URL,所以我在其中使用mod_rewriteApache .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]
4

1 回答 1

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]
于 2012-08-18T00:35:45.510 回答