.htaccess中的Apache重定向问题

时间:2009-02-08 16:22:12

标签: apache mod-rewrite redirect

我遇到问题getring一个简单的重定向语句对我的Godaddy帐户生效。我的.htaccess文件中有以下语句:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.mydomain.net$ [NC]
RewriteRule ^(.*)$ http://mydomain.net/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^mydomain.net$ [NC]
RewriteRule ^/lists/$ / [R=301]

RewriteCond %{HTTP_HOST} ^mydomain.net$ [NC]
RewriteRule ^/blog/$ http://myotherdomain.net/ [R=301]

第一次重定向总是有效。然而,第二和第三,永远不会工作。我刚收到服务器的404。 Apache日志不会显示任何有用的信息 - 只是404。

任何想法,任何人? 对你的帮助表示感谢。 感谢

4 个答案:

答案 0 :(得分:0)

对于这样的简单重定向,最好使用简单的RedirectMatch指令:

RedirectMatch 301 ^/lists/$ http://mydomain.net/
RedirectMatch 301 ^/blog/$ http://myotherdomain.net/

如果您坚持使用重写,请务必在规则中添加L标记。

Apache mod_rewrite Flags说:

  

您几乎总是希望将[R]与[L]结合使用(即使用[R,L]),因为[R]标志本身会在http://thishost[:thisport]前面加上URI,但随后将其传递给规则集中的下一个规则,这通常会导致“请求中的URI无效”警告。

答案 1 :(得分:0)

  

每个目录重写
  在.htaccess文件中使用重写引擎时,每个目录前缀(对于特定目录始终相同)将自动删除以进行模式匹配并自动添加替换完成后    - http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule

所以只需将前导斜杠从模式中删除。

答案 2 :(得分:0)

只需删除开头的斜杠即可。最后使斜杠可选也是有用的。

RewriteCond %{HTTP_HOST} ^mydomain.net$ [NC]
RewriteRule ^lists/{0,1}$ / [R=301]

RewriteCond %{HTTP_HOST} ^mydomain.net$ [NC]
RewriteRule ^blog/{0,1}$ http://myotherdomain.net/ [R=301]

答案 3 :(得分:-1)

将第一个放在最后。一旦遇到重定向匹配,它就会运行它并忽略其余的。