RewriteRule和重定向301之间有什么区别

gra*_*boy 14 regex .htaccess

我正在使用这样的东西......

RewriteRule here/(.*) http://www.there.com/$1 [R=301,L] 
Run Code Online (Sandbox Code Playgroud)

但无法让它发挥作用

所以我用这个......

redirect 301 /here http://www.there.com 
Run Code Online (Sandbox Code Playgroud)

它工作得很好.

有人可以解释这个区别吗?你需要两个吗?

另外......如何从重定向中排除路径?

喜欢...重定向301所有...

redirect 301 /here http://www.there.com 
Run Code Online (Sandbox Code Playgroud)

/here/stayhere.html
Run Code Online (Sandbox Code Playgroud)

谢谢

Ple*_*and 16

RewriteRule由Apache的mod_rewrite处理,而Redirect由mod_alias处理.不,你不需要两者.

你的RewriteRule(使用正则表达式)将不匹配/here(但会匹配这样的路径/here/foo.html)因为它正在寻找紧接着的斜杠.您可以使用问号使其成为可选项:

RewriteRule ^here(/?.*) http://www.there.com$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

现在,这将与您的重定向具有相同的效果.可以添加RewriteCond以排除某些路径:

RewriteCond $0 !/here/stayhere\.html
Run Code Online (Sandbox Code Playgroud)

请注意,某些服务器默认情况下没有打开mod_rewrite.如果添加RewriteEngine on到您的配置不能解决问题,并且您无法打开mod_rewrite,至少mod_alias提供了RedirectMatch指令,这可能足够好:

RedirectMatch 301 ^/here(?!/stayhere\.html)(/?.*) http://www.there.com$1
Run Code Online (Sandbox Code Playgroud)

  • redirect将匹配替换为目标,其他部分保持不变.RewriteRule实际上完全转移到目标,没有从搜索部分带来的任何东西.很大的区别. (2认同)