2009-02-11 92 views
1

我试图创建完成两件事情重写规则:htaccess的重定向

  1. 重定向到(www.)?domain.comlog.domain.com
  2. 让上domain.com任何其他目录或文件的请求没有通过重定向

这不是一个Apache服务器(它是LiteSpeed),但据说它完全支持.htaccess文件。

这是我拍的规则:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ 
RewriteRule .* http://log.domain.com/ 

发生了什么事是,如果我要求一个特定的文件(如DIR/index.php文件),它允许通过,但目录请求仍然重定向到日志。 domain.com。我认为第二个RewriteCond的$会防止这种情况发生,但似乎并非如此。

编辑:只是为了档案的目的,我的意图是不重定向任何不存在的目录/文件到log.domain.com,因为用户不应该这样做。这使得规则变得更简单了,因为规则混乱和浓汤都是在第一条规则的基础上达成的。再次感谢!

+0

你应该说,你只需要在URL路径“/”重定向。 – Gumbo 2009-02-11 16:31:26

回答

2
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ 
RewriteRule ^$ http://log.domain.com/ 
+0

这适用于通过目录或文件,但现在停止将(www。)?domain.com重定向到log.domain.com。 – justinbelcher 2009-02-11 15:34:19

+0

嗯,是的,/是一个目录和所有。给修改后的版本一个镜头...... – chaos 2009-02-11 15:37:48

0

试试这个:

# skip the next rule if host is not example.com or www.example.com 
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ 
RewriteRule^- [S] 

# redirect if requested URI does not match a regular file or directory 
# or if the requested URI path is just "/" 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d [OR] 
RewriteCond %{REQUEST_URI} =/ 
RewriteRule^http://log.example.com/