我有一个简单的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]
把第一个最后一个。 一旦遇到重定向匹配,它将运行它并忽略其余部分。