0

...当然,除了 www,它也是一个子域。

这是我当前的 htaccess 规则,并添加了注释:

RewriteEngine On

#redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

#what does this do?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/login/

#rewrite /a/1 to /index.php?action=a&urlId=1
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?action=$1&urlId=$2 [L,QSA]

#rewrite /a to /index.php?action=a
RewriteRule ^([^/]+)/?$ index.php?action=$1 [L,QSA]

现在我的问题是,我添加了两个子域 a.domain.com 和 b.domain.com 指向同一个目录,因此通过相同的 htaccess - 但它们用于直接静态文件访问。我该如何预防a.example.comb.example.com使用上述规则?

也许有人可以解释这是做什么的:

#what does this do?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/login/

谢谢!

4

1 回答 1

1

解决方案是在执行 RewriteRule 之前添加一个检查主机是否为 domain.com 的条件

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$

关于您的第二个问题,一个或多个 RewriteCond 指令不是单独的指令,而是与 RewriteRule 相关联,它们是执行 RewriteRule 必须有效的条件。

在你的情况下:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/login/
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?action=$1&urlId=$2 [L,QSA]

仅当请求的 uri 不指向文件且不以 /login/ 开头时,才会执行 rewriteRule。

于 2013-06-20T21:06:07.097 回答