我一直在关注htaccess以及如何使用重写规则来为用户制作一种“虚假子域名”。
到目前为止,我有:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([a-z0-9-]+)/? http://$1.domain.com [R=301,NC,L]
RewriteCond %{HTTP_HOST} ^([a-z]+)\.domain\.com$
RewriteRule ^$ index.php?user=%1
这会占用任何/ somthing并使其成为子域,然后将子域值作为参数传递给它。
我希望现在能够使用实际参数,并通过“subdomain”中的额外“user”参数通过normaly传递它们 e.g。
fred.domain.com/index.php?page=1&sort=up
会给我$ _GET
['user'] = 'fred'
['page']= 1
['sort'] = up
但是对于我的生活,我无法弄清楚如何做到这一点!当我添加任何其他参数时,我松开用户位
有任何帮助吗? =)
关于htaccess的任何有用的教程都会很好!因为我发现的所有人都没有真正解释每个位的作用以及为什么= \
提前致谢
答案 0 :(得分:0)
.htaccess文件在这里无关。它无法帮助你 要将用户定向到您的服务器,您必须更改DNS记录,而不是Web服务器配置。
答案 1 :(得分:0)
我很确定你可以设置vhost * .yourdomain.com指向单个路径,然后使用mod_rewrite进行url解析。
答案 2 :(得分:0)
我假设:
domain.com
,即由某些共享托管服务(SHS)提供商托管。*.domain.com
映射到固定的子目录,例如/webroot/domain.com/public_html
;其他人为其用户执行此顶级重定向,并提供一个控制面板,允许帐户持有者将子域与特定子目录相关联。 所以你需要找出适用于你的情况:
http://sss.domain.com/
查看它是否路由到您的DOCROOT phpinfo()
脚本查看它用于指向DOCROOT的Rewrite环境变量。 (由于Apache中的技术原因,请参阅Dynamic mass virtual hosts with mod_rewrite,%{DOCUMENT_ROOT}无法为每个用户正确初始化,因此提供商通常使用RewriteMap
初始化替身;我使用%{ENV:DOCUMENT_ROOT_REAL })因此,我们假设您要设置一个名为http://blog.domain.com/
的博客,您可能需要:
http://domain.com/blog/*
到http://blog.domain.com/*
http://blog.domain.com/*
到DOCROOT/blogdir/*
我可以给你一套重写规则来做到这一点,但鉴于我这几个月已经回答了同样问题的十几种口味,你可以通过搜索或查看我的博客找到很多模板({{ 3}},Webfusion)我写了很多文章给出了更多的解释。
如果您希望单个应用程序捕获域的一些通配符子集,只要您可以在正则表达式中对其进行编码,那么您可以执行以下操作:
RewriteCond %{HTTP_HOST} (sompattern)\.domain\.com
RewriteRule ^(?!appdir/).* appdir/catchall.php?arg=$0&subdomain=%1 [L,QSA]
(?!appdir/)
位被称为先行否定断言,这会阻止规则重新启动。