.htaccess 重定向客户端的URL并使用mod_Rewrite重写服务器
我有以下问题,已经解决了几十次,但我没有找到任何解决办法 我正在写一个博客引擎,希望有漂亮的URL,所以我在.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
.htaccess
中使用Apachemod_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
可用