在 MediaTemple 上使用 ModRewrite 正确定向子域名失败

在 MediaTemple 上使用 ModRewrite 正确定向子域名失败

我熟悉修改.htaccess文件,但我最初的尝试却失败了。

最终,我希望将用户指向“虚构”的子域(不存在的子域),以便可以使用 PHP 和 MySQL 正确解析子域以查找特定成员的信息。我假设 MediaTemple 有某物配置为在任何访问之前始终检查真正的子域目录,因此.htaccess文件设置永远不会被触碰,进而只会产生错误。

例如:

当有人访问www.example.com当前网站时,它会显示父网站,其中包括有关如何成为会员的信息。一旦某人成为会员,他们的“唯一”URL 是:

www.example.com?MemberID=12345

最终,强迫成员记住问号代理等于可能会造成混淆,同时还需要记住正确的大写字母等。

我“希望”实现以下目标:

www.12345.example.com 

重定向至

www.example.com/index.php?MemberID=12345

index.php读取12345类似于$_GET函数来正确查找ID、有效并基于此返回响应。)

我相信我们可以?使用斜线后的信息实现相同的效果:

例如www.example.com/12345

问题是我们已经有其他页面用于/xxxx修改客户端内容,而且我不想阻止任何人简单访问的能力:www.example.com/contact例如作为实时链接。

(网站重定向到索引,尝试查找 memberid = 'contact' 但未找到任何结果)。

我的.htaccess 目前是:

ErrorDocument 404 /404.php
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com
RewriteRule .* http://example.com/processing_page.php?ID=%1 [L,R]

根据我的需求,我希望输入的内容www.something.example.com将被重定向到:www.example.com/processing_page.php?something

相反,它只是重定向到我的 mediatemple 托管页面(基本上表明不存在名为“某物”的子域)。

我在运行 CentOS5 和 LAMP 堆栈的 Media Temple DV 3.5 服务器上运行我们的服务器。

答案1

很抱歉听到您遇到的问题。如果您仍然遇到问题,我建议您联系我们的技术支持并查看我们的 wiki 上的具体规则。

如果您提出支持请求,请随时通过我们的 Twitter 或电话支持联系我们。

答案2

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com
RewriteRule .* http://example.com/processing_page.php?ID=%1 [L,R]

根据我的需求,我希望输入的内容 www.something.example.com将被重定向到: www.example.com/processing_page.php?something

此代码实际上不会完成您要求的操作。第一个条件明确排除了以 开头的任何主机名www.,因此它不会重定向对 的请求www.something.example.com。您必须请求something.example.com此指令才有机会。否则,您只会得到默认主页。

这是假设您在 DNS 中配置了“通配符”子域,并ServerAlias在您的站点的虚拟主机中定义了适当的指令(并且已重新启动 Web 服务器)。

要修改上述指令来执行您需要的操作,您需要类似下面的内容:

RewriteCond %{HTTP_HOST} ^www\.([a-z0-9]+)\.example\.com
RewriteRule .* http://example.com/processing_page.php?ID=%1 [L,R]

这也应该已经消失了.php通过内部重写附加扩展的第一个规则。通常,重定向应始终在重写之前。

相关内容