2011-12-18 174 views
1

我正在尝试为网站设置重写规则,但目前有一个问题。 目前,这是在本地设置的,用于测试。mod_rewrite规则问题

安装程序是一个主要的根文件夹,其中有一些子文件夹,其中一些是子域。子域已经映射到httpd.conf中,并且它们正常工作。

example.com 
sub.example.com 
something.example.com 
... 

用下面的文件夹结构:

C:/website 
C:/website/css 
C:/website/images 
C:/website/sub (subdomain) 
C:/website/something (subdomain) 

所以,在“网站”文件夹中的文件被example.com使用,也文件夹不能映射为子域。在每个子域中都有每个子域使用的特定文件,但是他们也使用父目录中的一些常用文件(与问题无关)。对于主要网站(以及子域),一切都通过index.php文件(已经通过重写规则解决),因此不能直接访问其他文件(也不是很相关)。

所以,我现在的问题是,如果访问不带'WWW'(sub.example.com)的子域,那很好。如果通过'www'(http://www.sub.example.com)访问,它会转到主站点。

这里是我的.htaccess文件(重写规则):

RewriteEngine on 

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

RewriteRule \.(css|jpe?g|gif|png|js)$ - [L] 

RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L] 

RewriteRule ^([^/\.]+)/?$ /index.php?cmp=$1 [L] 
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /index.php?cmp=$1&page=$2 [L] 
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /index.php?cmp=$1&subsection=$2&page=$3 [L] 

一点需要注意:主控制器(的index.php)几乎相同的概念将是子域,所以大部分这些规则在子域的.htaccess文件中。

任何帮助表示赞赏。

回答

0

这条规则是奇怪:

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

我这样做几乎完全你的描述,但没有加入“WWW”的点,如果有已经东西。我所做的是:

# if domain name without "www", add them: 
RewriteCond %{HTTP_HOST} ^mydomainname\.(fr|com|net|org|eu) [NC] 
# add www *and* force redirection : 
RewriteRule (.*) http://www.mydomainname.%1$1 [QSA,R=301,L] 

因此,您只需在需要时添加www,即根本没有'sub'时。