如何将所有子域重定向到一个文件,但让存在的文件加载

时间:2012-10-22 14:59:37

标签: php apache .htaccess mod-rewrite

所以我有一个domain.com,我想让所有子域名重定向到我正在制作的博客系统

so domain.com - 主网站(不是博客,由index.php加载) anything.domain.com - 博客网站 - >所有内容都重定向到主目录中的blogs.php(与index.php相同)

现在我要使用:

RewriteCond %{HTTP_HOST} ^([a-z0-9_]+\.)domain.com$ [NC]
RewriteRule (.*) blogs.php [QSA,L]

或多或少它的工作原理(我使用漂亮的网址 - 获取从$ _SERVER [request_uri]中提取的实际$ _GET表

但是,我需要的是能够将文件链接到现有目录,如: http://someblog.domain.com/js/somefile.js 现在它试图加载blogs.php和/js/somefile.js作为参数

我试图添加:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

但有了它 - 它总是打开主网站(因为每个子域都被重定向到主域并充当现有的目录/文件)

总结一下:

RewriteCond %{HTTP_HOST} ^[*]+\.domain.com (xxx)! [NC] 
//in place of xxx - somehow check if there is anything after adderess
RewriteCond %{REQUEST_FILENAME} !-f  // and check if it exists
RewriteCond %{REQUEST_FILENAME} !-d  //

如果存在 - 服务它,如果不遵循那个静默地将请求转换为blogs.php的旧服务器:

RewriteCond %{HTTP_HOST} ^([a-z0-9_]+\.)gragieldowa.pl$ [NC]

RewriteRule (.*) blogs.php [QSA,L]

提前感谢任何帮助:)

1 个答案:

答案 0 :(得分:1)

您可以尝试在规则开头添加传递,以便传递/index.php/blogs.php/的任何内容,并且不会进行重写。然后你可以进行域/子域检查和!-f和!-d检查。

# handle root request
RewriteCond %{HTTP_HOST} !^(www\.)?domain.com$ [NC]
RewriteRule ^/?$ blogs.php [L]

# redirect subdomains to blog.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^(www\.)?domain.com$ [NC]
RewriteRule ^ blogs.php [L]