htaccess子域重定向更改地址

时间:2012-04-13 10:20:18

标签: .htaccess mod-rewrite subdomain

我已经在SO上阅读了两天的帖子,已经尝试了十几个样本,但无法让我的重写工作。

这是我的情况:
我在Ubuntu上运行Apache 我的根目录中有2个文件(file1.php,file2.php)和文件夹(网站)
我想将www.mydomain.com和domain.com重定向到该文件夹​​。那部分正在使用这套规则:

RewriteCond %{HTTP_HOST} ^(www.)?mydomain\.com$
RewriteCond %{REQUEST_URI} !^/website/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /website/$1
RewriteCond %{HTTP_HOST} ^(www.)?mydomain\.com$
RewriteRule ^(/)?$ website/ [L]

现在我正在尝试使用子域名 demo.mydomain.com应该访问www.mydomain.com/file1.php?v=demo demo.mydomain.com/file2.php应该访问www.mydomain.com/file2.php?v=demo 并且浏览器地址栏中的网址不应更改。

我已经有了这个:

RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.mydomain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$   http://www.mydomain.com%{REQUEST_URI}?v=%1 [L]
##
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.mydomain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ file1.php?v=%1 [L]

这导致demo.mydomain.com/file2.php访问www.mydomain.com/file2.php?v=demo,即可,但URL也会在地址栏中更改。那不行 demo.mydomain.com重定向到www.mydomain.com,进入网站文件夹,这是完全错误的。

如你所见,我快到了。我只是错过了一些小件 请帮帮我。

1 个答案:

答案 0 :(得分:0)

您在重写规则中使用的是与当前域不同的域(demo.mydomain.com与www.mydomain.com)。 Apache并不知道这些指向同一服务器和document_root,因此apache会进行重定向。只需删除域名部分。

RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.mydomain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$   $1?v=%1 [L,QSA]
##
...