RewriteRule vs Redirect - 哪个更好?

时间:2015-03-25 12:28:41

标签: apache .htaccess mod-rewrite redirect

简介

  

很长一段时间以来,我一直使用RewriteRule作为重定向命令。例如,我使用了这个:

RewriteRule ^some-page.html$ /new-page.html [R=301,L]

但最近我找到了其他方法,使用Redirect关键字:

Redirect 301 /some-page.html /new-page.html

问题

哪种方法更好,应该用作主要工具?

更好地被认为是:

  • 更稳定
  • 安全
  • 更快
  • 更多'社区'承认

2 个答案:

答案 0 :(得分:3)

毫无疑问RewriteRule将为您提供更好的服务,因为它具有正则表达式支持,并且在mod_rewrite模块中提供了更多好东西。另一个是较早的mod_alias模块,并且不支持许多重要的事情,例如:

  1. 没有RewriteCond例如匹配查询字符串
  2. 无内部重写
  3. 不支持env变量
  4. 无法使用代理
  5. 不支持NENCQSA等广告。
  6. 列表会很长,但所有说完了,你可以依靠mod_rewrite为你提供更好的服务。

答案 1 :(得分:1)

我同意@anubhava,RewriteRule作为一般工具更强大,更有用。但是,要回答你的具体情况,那就更好了。标准:

  

更稳定

没有任何内容。 Redirect(mod_alias)已经存在了很长时间。 (?)

  

安全

同样,如果你知道自己在做什么,那么就不会有任何更安全的事情。"比另一个。 RewriteRule更复杂,因此存在更多错误空间。但是,您应该警惕的一件事是,您不应该在同一个文件中一起使用Redirect(mod_alias)和RewriteRule(mod_rewrite)。它们属于不同的模块并在不同的时间执行。一起使用它们会产生意想不到的结果。

  

更快

有些人认为Redirect更快。这简单得多。

  

社区'

更加认可

有争议的。这些天似乎会更多地使用RewriteRule,但它会做得更多。许多人会使用它,因为这是他们一直使用的。 Apache文档建议如果您只是进行简单的重定向,那么首选mod_alias Redirect

When not to use mod_rewrite

您应该注意,您在上面发布的两条指令并不完全相同。 Redirect是前缀匹配,匹配后的任何内容都会自动传递到目标URL。而在RewriteRule中,您使用了锚点来明确标记URL的开头和结尾。