Apacheredirect问题.htaccess中

我有一个简单的redirect语句的问题,使我的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] 

第一次redirect总是工作。 第二和第三个,但是,从来没有工作。 我只是从服务器获得一个404。 Apache日志没有显示任何有用的信息 – 只是一个404。

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

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

所以只要把领先的斜线从模式中删除。

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

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

如果您坚持使用重写,请确保将L标志添加到您的规则中。

Apache mod_rewrite标志说:

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

只需在开始时删除斜线。 这也可能是有用的,使最后的斜线可选。

 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] 

把第一个最后一个。 一旦遇到重定向匹配,它将运行它并忽略其余部分。