.htaccess 重定向客户端的URL并使用mod_Rewrite重写服务器

.htaccess 重定向客户端的URL并使用mod_Rewrite重写服务器,.htaccess,mod-rewrite,redirect,url-rewriting,.htaccess,Mod Rewrite,Redirect,Url Rewriting,我有以下问题,已经解决了几十次,但我没有找到任何解决办法 我正在写一个博客引擎,希望有漂亮的URL,所以我在.htaccess中使用Apachemod_rewrite。像/page/3=>/?s=3这样的东西工作得非常好,因为我可以在PHP脚本中编写漂亮的URL。但是我有一个表单字段用于使用method=“get”提交的搜索,因此除了将客户端指向丑陋的URL之外,我别无选择。所以我想要的是一种重定向客户端,然后重写服务器的URL:/?q=foo=client=>/search/foo=serve

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

我正在写一个博客引擎,希望有漂亮的URL,所以我在
.htaccess
中使用Apache
mod_rewrite
。像
/page/3=>/?s=3
这样的东西工作得非常好,因为我可以在PHP脚本中编写漂亮的URL。但是我有一个表单字段用于使用
method=“get”
提交的搜索,因此除了将客户端指向丑陋的URL之外,我别无选择。所以我想要的是一种
重定向
客户端,然后
重写服务器的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等

因此,请尝试以下两条规则,而不是您的fry规则:

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]

我很抱歉,但这对我来说不起作用,我现在得到了500分:(我的
错误.log
告诉我:
[Sat Aug 18 05:18:42 2012][alert][client 127.0.0.1]…/.htaccess:RewriteCond:无法编译正则表达式“^[a-Z]{3,9}\\\/(index.php)\\?q=([^\\\\&]+)\\,请参阅:http://localhost/.../?q=foo
我甚至试过修改你的代码,但都没用。@Ps0ke抱歉,第二次重写条件中有一个类型,最后有一个``错误,我编辑了答案,仍然不起作用。没有错误,但仍然无法重定向。中的第一个字符串是什么de>RewriteCond
^[A-Z]{3,9}')为什么
RewriteRule`中的正则表达式只是一个
^
-行标记的开始?@ps0ke,因为
%{u请求}
看起来是这样的:
GET/?q=something HTTP/1.1
及其与最需要的方法(GET)的匹配。第二件事是操作系统,因为我们不关心uri是什么,我们只是在条件中匹配它。那么我们不应该使用%{REQUEST_uri}吗?
REQUEST\u URI
请求的URI的路径组件,如
/index.html
。这明显排除了查询字符串,该字符串作为其自身变量
query\u string
可用