我遇到问题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。
任何想法,任何人? 对你的帮助表示感谢。 感谢
答案 0 :(得分:0)
对于这样的简单重定向,最好使用简单的RedirectMatch
指令:
RedirectMatch 301 ^/lists/$ http://mydomain.net/
RedirectMatch 301 ^/blog/$ http://myotherdomain.net/
如果您坚持使用重写,请务必在规则中添加L
标记。
您几乎总是希望将[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)
将第一个放在最后。一旦遇到重定向匹配,它就会运行它并忽略其余的。