2011-02-04 106 views
0

是我遇到了一个代码的.htaccess需要帮助

RedirectPermanentRewriteRule

的区别

RewriteRule ^coaching/([^/]+)/?$ search_result.php?categoryName=$1 [NC,L] 

另一个设置

RedirectPermanent "/coaching/Run to live" http://www.example.com/coaching 

前者规则打破我的设置我也不能删除。

它使输出像这样

http://www.example.com/coaching?categoryName=Run%20to%20live 

什么应该被添加,使得在不改变第一代码我可以acheive结果

http://www.example.com/coaching 

回答

2

RewriteRule指令来自mod_rewrite,而RedirectPermanent指令来自mod_alias

在这种情况下,它们不能很好地一起玩。 RedirectPermanent使用原始URL /指导/运行生活,但看到修改后的查询字符串?categoryName =运行%20to%20live由您的RewriteRule创建。虽然这是一种意想不到的情况,但这是一个在每个目录(.htaccess)上下文中一起使用mod_rewrite和mod_alias的问题。

由于无论如何您需要使用mod_rewrite作为原始RewriteRule,所以最好的选择是使用RewriteRule而不是RedirectPermanent进行第二次操作。这将是这个样子:

# Perform this redirect first 
RewriteRule "^coaching/Run to live$" http://www.example.com/coaching [R=301,L] 

RewriteRule ^coaching/([^/]+)/?$ search_result.php?categoryName=$1 [NC,L] 
1

的差(在一定条件下)是用永久重定向HTTP响应是301(永久重定向) - 告诉浏览器/爬行程序页面已经永久移动... RewriteRule返回302(除非在选项中另有指定) - 这意味着浏览器此redir ection是“临时的”,并且在未来的日期,该链接将再次提供所请求的内容。

+0

我将广告重定向和永久重定向是Apache的指令,从mod_alias中,我认为,可以处理基本的重定向,重写规则是mod_rewrite的东西,可以做同样的工作,更复杂事情也是如此。通常人们不知道他们可以在没有mod_rewrite的情况下执行简单的重定向规则。 – regilero 2011-02-05 20:40:47