【问题标题】:Issue with mod_rewrite rulesmod_rewrite 规则问题
【发布时间】:2012-01-23 04:00:10
【问题描述】:

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

设置是一个主根文件夹,其中有许多子文件夹,其中一些是子域。子域已经映射到 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 文件中。

感谢任何帮助。

【问题讨论】:

    标签: apache mod-rewrite subdomain


    【解决方案1】:

    这条规则很奇怪:

    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,即根本没有“子”时。

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      相关资源
      最近更新 更多