Apache 上使用 mod-rewrite 的虚拟子域名

Apache 上使用 mod-rewrite 的虚拟子域名

我正在尝试将对子域的请求重写到特定文件。因此,当我访问http://test.domain.com它显示了 campaign.php

RewriteCond %{REQUEST_URI} !^index\.php
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule . /campaign.php?user=%1 [L]

然而这给了我一个服务器 500 错误

如果我将最后一行改为以下内容

RewriteRule . http://www.domain.com/campaign.php?user=%1 [L]

这似乎有效,但它也会将浏览器中的 url 更改为http://www.domain.com/campaign.php?user=test。我想保留http://test.domain.com作为浏览器 URL 并显示 campaign.php 文件。实现此目的的最佳方法是什么?

更新:

我与我的托管商的支持台进行了交谈,他们帮助修复了这个问题,脚本变成了这样:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !/(campaign|index)\.php
RewriteCond %{HTTP_HOST} ^(.*).domain\.com$ [NC]
RewriteRule (.*) campaign.php?user=%1 [L,QSA] 

答案1

RewriteCond %{REQUEST_URI} !/(campaign|index)\.php
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule . /campaign.php?user=%1 [L]

相关内容