重定向到子域重定向htaccess的所有内容

时间:2014-12-12 07:08:59

标签: apache .htaccess mod-rewrite redirect

所以我有以下代码:

ServerName test.com
ServerAlias *.test.com
DocumentRoot /var/www/test.com/public_html
Options All -Indexes
FileETag none
ServerSignature Off

<IfModule mod_rewrite.c>
    RewriteEngine On

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

    RewriteCond %{ENV:REDIRECT_STATUS} .+
    RewriteRule ^ - [L]

    RewriteCond %{HTTP_HOST} ^(.*)\.test\.com$ [NC]
    RewriteRule ^$ /%1.php [L,NC,QSA]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{HTTP_HOST} ^([^.]+)\.test\.com$ [NC]
    RewriteRule ^(.+)/?$ /%1.php?o=$1 [L,NC,QSA]
</IfModule>

在我的旧服务器上,我在.htaccess文件中删除了这个文件(减去了documentmentroot部分),并且这样做很好:

sub.test.com -> test.com/sub.php

它仍然可以正确执行此操作,但现在我已将其移至site-available配置文件中,如果我尝试访问文件,它会中断并使用与文件相同的规则:

sub.test.com/file.css -> test.com/sub.php

有没有办法阻止它这样做? (我尝试过做RewriteCond %{REQUEST_FILENAME} !-f等等,但似乎并不关心这个规则)。 感谢

1 个答案:

答案 0 :(得分:0)

在Apache配置中尝试以下代码:

<IfModule mod_rewrite.c>
    RewriteEngine On

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

    RewriteCond %{ENV:REDIRECT_STATUS} .+
    RewriteRule ^ - [L]

    RewriteCond %{HTTP_HOST} ^(.*)\.test\.com$ [NC]
    RewriteRule ^/?$ /%1.php [L,NC,QSA]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{HTTP_HOST} ^([^.]+)\.test\.com$ [NC]
    RewriteRule ^/?(.+?)/?$ /%1.php?o=$1 [L,NC,QSA]
</IfModule>

Apache配置与RewriteRule中的前导斜杠匹配,与htaccess

不同