1

我已经在 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 和 url浏览器的地址栏不应该改变。

我已经有了这个:

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 进入网站文件夹,这是完全错误的。

如你所见,我快到了。我只是缺少一些小片段。
请帮我。

4

1 回答 1

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]
##
...
于 2012-04-13T20:31:08.957 回答