htaccess“伪造子域名”

时间:2012-02-11 16:11:57

标签: php .htaccess

我一直在关注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的任何有用的教程都会很好!因为我发现的所有人都没有真正解释每个位的作用以及为什么= \

提前致谢

3 个答案:

答案 0 :(得分:0)

.htaccess文件在这里无关。它无法帮助你 要将用户定向到您的服务器,您必须更改DNS记录,而不是Web服务器配置。

答案 1 :(得分:0)

我很确定你可以设置vhost * .yourdomain.com指向单个路径,然后使用mod_rewrite进行url解析。

答案 2 :(得分:0)

我假设:

  • 您拥有一个域名domain.com,即由某些共享托管服务(SHS)提供商托管。
  • 您可以访问控制面板以设置子域,或者您的SHS提供商已经设置了 * A记录映射到其共享服务。
  • 有些SHS提供商只是将*.domain.com映射到固定的子目录,例如/webroot/domain.com/public_html;其他人为其用户执行此顶级重定向,并提供一个控制面板,允许帐户持有者将子域与特定子目录相关联。

所以你需要找出适用于你的情况:

  • 查看您的SHS提供商常见问题解答,
  • 尝试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/*
  • 发布永久重定向 [R = 301]
  • 问题内部重定向从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/)位被称为先行否定断言,这会阻止规则重新启动。