Apache 一切重定向到子域重定向访问

Apache 一切重定向到子域重定向访问,apache,.htaccess,mod-rewrite,redirect,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

因此,我有以下代码:

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>
它仍然可以正确地执行此操作,但现在我已将其移动到“站点可用配置”文件中,如果我尝试访问某个文件,它会中断并使用与该文件相同的规则来获取:

sub.test.com/file.css -> test.com/sub.php
有没有办法阻止它这样做?我试过重写cond%{REQUEST\u FILENAME}-f等等,但它似乎不太关心这个规则。
感谢您在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配置与重写规则中的前导斜杠相匹配,而htaccess

Pattern^$无法与file.css匹配。你有更多的规则吗?@anubhava我会添加所有的规则,以防其中一条规则冲突somehow@anubhava我加上去了。奇怪的是,它不工作仅仅是因为我将它移动到apache配置文件夹中,而不是使用.htaccess文件,因为它以前确实工作过。这似乎仍然在做同样的事情,所有文件都会自动匹配子域重写,并最终下载由其指定的php文件。出于测试目的,您是否可以注释掉重写规则^/?。+?/?$/%1。php?o=$1[L,NC,QSA]规则,并查看其是否会改变行为。好的,这会使所有文件正确加载,但是现在所有的子域都只是加载页面index.php,其中一部分只是执行sub.test.com/path/to test.com/sub.php?o=path之类的操作,它可能在查询中也有一个尾随斜杠
<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>