我正在尝试为网站设置重写规则,但到目前为止还有一个问题。 目前,这是在本地设置的,用于测试。
设置是一个主根文件夹,其中有许多子文件夹,其中一些是子域。子域已经映射到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使用'website'文件夹中的文件,以及未映射为子域的文件夹。在每个子域中,每个子域都使用特定文件,但它们也使用父目录中的一些公共文件(与问题无关)。对于主网站(以及子域),一切都通过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 :(得分: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”。