2010-03-30 71 views
0

我有我找不出mod_rewrite重定向问题。重定向到子目录和子目录出

来自特定域的所有请求都会“静静地”重写到指定的子目录中。例如www.mydomain.net/hello.html检索/net/hello.html中的文件。下面的.htaccess (放在我的托管根)达到这个完美:

RewriteEngine on 
RewriteBase/
RewriteCond %{ENV:REDIRECT_STATUS} 200 # <-- i will need this later. read to the end of the post. 
RewriteRule .* - [L] 
rewriteCond %{HTTP_HOST} ^www.mydomain.net$ 
rewriteCond %{REQUEST_URI} !^/net.*$ 
rewriteRule (.*) /net/$1 [L] 

但是,直接的网址进入该目录但应明显与301的URL重定向没有该子目录。例如www.mydomain.net/net/hello.html应该重定向到www.mydomain.net/hello.html(它仍然检索/net/hello.html中的文件)。我.htacces此(放置在/net文件遗憾的是不起作用:

RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST} ^localhost$ 
RewriteRule ^(.*) /$1 [R=301,L]  

我得到一个不定式重定向循环尽管在根.htaccess文件的RewriteCond %{ENV:REDIRECT_STATUS} 200块...所以有什么不对?

顺便说一句,我必须使用mod_rewrite,因为该网站是externaly托管,我没有访问的Apache配置。

非常感谢任何指针。

回答

1

检查HTTP request lineTHE_REQUEST代替:

RewriteCond %{THE_REQUEST} ^GET\ /net[/? ] 
RewriteRule ^net($|/(.*)) /$2 [L,R=301] 
+0

感谢秋葵!使用THE_REQUEST规避循环。但是,我必须将RewriteRule行更改为“RewriteRule ^(。*)/ $ 1 [L,R = 301]”,因为.htaccess文件是从子目录“net”执行的。 – halloleo 2010-04-12 06:06:41