301重定向问题?

时间:2010-09-11 08:20:27

标签: .htaccess mod-rewrite redirect

这是将页面重定向到另一个域页的良好示例:

RewriteCond %{HTTP_HOST} ^dejan.com.au$ [OR]
RewriteCond %{HTTP_HOST} ^www.dejan.com.au$
RewriteRule ^seo_news_blog_spam\.html$ "http\:\/\/dejanseo\.com\.au\/blog\-spam\/" [R=301,L]

或旧的作品也是如此:

301 redirect seo_news_blog_spam.html http://dejanseo.com.au/blog/spam/

是什么区别?

2 个答案:

答案 0 :(得分:0)

据推测,这些规则在功能上是等价的(好吧,假设http://dejanseo.com.au/blog/spam/应该像第一个重定向到http://dejanseo.com.au/blog-spam/一样,并且指向该位置的唯一主机是dejanseo.com.au有或没有www)。

第一个示例使用来自mod_rewrite的指令,而第二个示例使用来自mod_alias的指令。我认为首选的选项是针对这种特殊情况的第二个选项,如果不仅因为它更简单一点(创建mod_rewrite正在使用的正则表达式也会产生边际额外开销,但这非常小):

Redirect 301 seo_news_blog_spam.html http://dejanseo.com.au/blog-spam/

但是,我怀疑你拥有第一个的原因是它是使用CPanel创建的(基于在另一个用户的问题之前出现的替换中不必要的转义,其中指示CPanel是罪魁祸首)。他们使用mod_rewrite选项,因为它提供了Redirect指令所没有的条件灵活性,并且我认为这种灵活性在用于创建这些规则的任何接口中都有所体现。

您会注意到,RewriteCond标识的第一个示例中是否存在基于主机名重定向的条件。这允许您执行更强大的重定向,这些重定向不仅仅基于请求路径。请注意,mod_rewrite还允许用户看不到的内部重定向,mod_alias不适用于此,但这不是它在此处使用的容量。

最后一点,RewriteCond语句中的主机名在技术上应该对其点进行转义,因为.字符在正则表达式中具有特殊含义。您也可以将它们组合起来,将它们更改为direct string comparisons,或者完全删除它们(因为我认为它们在这里没有做任何有用的事情)。

答案 1 :(得分:0)

不可信,问题是synthax不正确,所以代替:

redirect 301 seo_news_blog_spam.html http://dejanseo.com.au/blog/spam/

它应该是这样的:

Redirect 301 seo_news_blog_spam.html http://dejanseo.com.au/blog/spam/

一,第一封大字是所有麻烦的根源,浪费时间:D 它现在按预期工作! 感谢所有参与者,问题解决了。