...除了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.com
和b.example.com
完全使用上述规则?
也许有人可以解释这是做什么的:
#what does this do?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/login/
谢谢!
答案 0 :(得分: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。