我熟悉修改.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
通过内部重写附加扩展的第一个规则。通常,重定向应始终在重写之前。