Php htaccess“伪造子域”

Php htaccess“伪造子域”,php,.htaccess,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=30

我一直在研究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
这将获取any/somthing并使其成为子域,然后将子域值作为参数传入以拾取

我希望现在能够使用实际参数,并使用子域中的额外用户参数通过normaly传递它们 e、 g

你能给我美元吗

['user'] = 'fred'
['page']= 1
['sort'] = up
但就我的一生而言,我不知道该怎么做!当我添加任何其他参数时,我松开了用户位

有什么帮助吗=

另外,任何关于htaccess的有用教程都很好!正如我所发现的,我并没有真正解释每一个比特的作用和原因=\


提前感谢

。htaccess文件与此无关。这帮不了你。
要将用户定向到您的服务器,您必须更改DNS记录,而不是web服务器配置

我非常确定您可以将vhost*.yourdomain.com设置为指向一个路径,然后使用mod_rewrite进行url解析。

我假设:

您拥有一个域,比如domain.com,该域由某个共享托管服务SHS提供商托管。 您可以访问控制面板来设置子域,或者您的SHS提供商已经设置了到其共享服务的*a记录映射。 一些SHS提供商只是将*.domain.com映射到一个固定的子目录,比如/webroot/domain.com/public\u html;其他人为他们的用户执行顶级重定向,并提供一个控制面板,允许帐户持有人将子域与特定子目录关联。 因此,您需要确定哪一项适用于您的情况:

通过查看SHS供应商常见问题, 通过尝试http://sss.domain.com/ 查看它是否路由到DOCROOT 通过使用phpinfo脚本查看重写环境变量用于指向DOCROOT。由于Apache中的技术原因,请参阅,%%{DOCUMENT_ROOT}无法为每个用户正确初始化,因此提供商通常使用重写映射来初始化代理;mine使用%{ENV:DOCUMENT\u ROOT\u REAL} 所以,让我们假设您想在say上建立一个博客http://blog.domain.com/,您可能需要:

发出从旧引用到的永久重定向[R=301]http://domain.com/blog/*到http://blog.domain.com/* 从中发出内部重定向http://blog.domain.com/*到DOCROOT/blogdir/* 添加必要的条件联锁以防止无限重定向循环,其中第二个内部重定向随后被视为遗留引用。 我可以给你一套重写规则来做到这一点,但考虑到我这个月已经回答了同一个问题的十几种风格,你可以通过搜索或查看我的博客找到很多模板,我在那里写了许多文章,提供了更多的解释

如果您希望单个应用程序捕获域的某些通配符子集,只要您可以在regexp中对其进行编码,就可以执行以下操作:

RewriteCond %{HTTP_HOST}    (sompattern)\.domain\.com
RewriteRule ^(?!appdir/).*  appdir/catchall.php?arg=$0&subdomain=%1 [L,QSA]

那个?!appdir/bit被称为先行否定断言,这将停止规则自身的重新引用。

您可以使用环境变量进行此类操作。请参阅apache文档了解mod_rewrite如何设置或引用它们。此外,您还可以在PHP脚本和$\u服务器superglobal中实现这一点。托管服务运营的大多数域都提供通配符子域路由。因此,我的DNS域有一个子域catch all,它指向我的托管服务HS load balance IP 94.136.40.100,与所有其他共享托管帐户持有人一样。我的HS解码HTTP_主机,将所有子域指向我的DOCRROT,我必须使用我的DOCROOT.htaccess来处理子域。请参阅提供更多解释的文章。我在您的评论中没有发现与我的答案相矛盾的内容,但无论如何,感谢您的努力。如果您的HS提供商已经像大多数人一样设置了通配符DNS条目,那么你在DNS里什么都不用做,所有的配置都在你的DOCROOT.htaccess里完成了,这使得你的两种说法至少很容易让人误解:我还是不明白。如果你已经有了DNS设置,这并不意味着你根本不需要它。这里有什么误导?因为大多数SHS提供商为每个帐户设置了一个*DNS a记录,所以您通常不需要更改任何DNS记录。实现OP所需的第一步是配置他或她的.htaccess文件。所以你的两个分数都差不多是180%,仅此而已。没什么大问题。很抱歉
RewriteCond %{HTTP_HOST}    (sompattern)\.domain\.com
RewriteRule ^(?!appdir/).*  appdir/catchall.php?arg=$0&subdomain=%1 [L,QSA]