【问题标题】:htaccess redirect for everything but files/directorieshtaccess 重定向除文件/目录以外的所有内容
【发布时间】:2010-10-06 22:32:53
【问题描述】:

我正在尝试创建一个重写规则来完成两件事:

  1. (www.)?domain.com 重定向到log.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),它就会通过,但目录请求仍会重定向到 log.domain.com。我认为第二个 RewriteCond 的 $ 会阻止这种情况发生,但事实并非如此。

编辑:仅出于存档目的,我的意图不是将任何不存在的目录/文件重定向到 log.domain.com,因为用户永远不必这样做。这使得规则的标准变得更加简单,混乱和秋葵都在下面给出了他们的第一条规则。再次感谢!

【问题讨论】:

  • 你应该说你只希望 URL 路径“/”被重定向。

标签: .htaccess mod-rewrite redirect litespeed


【解决方案1】:
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
RewriteRule ^$ http://log.domain.com/

【讨论】:

  • 这适用于让目录或文件通过,但它现在停止将 (www.)?domain.com 重定向到 log.domain.com。
  • REQUEST_FILENAME 绝不只是“/”。 (除非你使用这样的东西:“RewriteRule ^ /”)
  • 修改后的规则也没有成功——仍然无法重定向到 log.domain.com。
  • 与其尝试处理异常,不如仅在用户请求完全 (www.)?domain.com(/) 时进行重定向是否更有意义?没有别的?我不知道该怎么做,但这似乎是一种更简单的方法。
  • 我以为我们正在经历这一切,因为 OP 还想重定向所有 404。
【解决方案2】:

试试这个:

# 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/

【讨论】:

  • 谢谢 Gumbo,我相信你的第一条规则也能解决问题。
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 2015-06-27
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
相关资源
最近更新 更多