我正在尝试实现虚拟子域,因为我的托pipe服务提供商已经设置了我可以拥有的子域数量的限制! 我已经有一个通配符的DNS条目,所以所有子域都被接受并发送到我的域的根目录。 这是我已经把.htaccess处理redirect:
RewriteEngine on RewriteCond %{HTTP_HOST} !^(www|admin).* [NC] RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9]+)\.domain\.-com RewriteCond /home/username/public_html/subdomain/%1 -d RewriteRule ^(.*) /home/username/public_html/subdomain/%1/$1
问题是在实际redirect的最后一行,服务器显示500(内部服务器错误),但Apache错误日志不会扩大错误。 如果我把这样的东西放在它的位置:
RewriteRule ^(.*) index.php?path=/home/username/public_html/subdomain/%1/$1
它工作正常…而path是正确的文件path。
虽然晚了,但是这里是我的问题的完整答案。 如果你用完子域名,这是一个非常方便的脚本。
RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{HTTP_HOST} !^[www|admin] [NC] RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9]+)\.domain\.com [NC] RewriteRule (.*) /subdomain/%1/$1 [L]
请注意, http : //virtual.domain.com/index.php的实际url是http://www.domain.com/subdomain/virtual/index.php
我会build议:
请注意,我已经删除( /home/username/public_html )
所以这应该接近:
RewriteEngine on # first handle subdomains RewriteCond %{HTTP_HOST} !^(www|admin)\.* [NC] RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9]+)\.domain\.com RewriteCond /home/username/public_html/subdomain/%1 -d RewriteRule (.*) /subdomain/%1/$1 # then in main domains: RewriteCond %{HTTP_HOST} ^(www|admin)\.* [NC] # ...refuse access to subdomain: RewriteRule ^/subdomain(.*) - [R=404,L]
注意:这是一个404redirect,所以你可以在重写过程的开头创build你自己的404,如下所示:
ErrorDocument 404 /404.php RewriteEngine on RewriteRule /404.php - [QSA,L] ... blabla...
并在您的404.php处理URL来显示一些不错的消息:)
请尝试使用RewriteLog指令:它可以帮助你追踪这样的问题:
# Trace: # (!) file gets big quickly, remove in prod environments: RewriteLog "/web/logs/mywebsite.rewrite.log" RewriteLogLevel 9 RewriteEngine On
我最喜欢的工具来检查正则expression式:
http://www.quanetic.com/Regex (不要忘了selectereg(POSIX)而不是preg(PCRE)!)