Wildcard Subdomains我知道以前有一些线程,但是我已经尝试了所有建议的内容(我可以找到),到目前为止,对我来说没有任何工作... 考虑到这一点,这是我想要做的事情: 首先,我要允许用户发布页面,并为他们提供各自选择的子域(例如:user.mysite.com)。据我所知,最好的方法是使用mod_rewrite和.htaccess将user.mysite.com映射到mysite.com/user-正确吗? 如果那是正确的话,有人可以给我明确的指示来执行此操作吗? 另外,我正在使用MAMP在本地进行所有开发,因此如果有人可以告诉我如何设置本地环境以相同的方式工作(我已经读过这比较困难),我将不胜感激。老实说,我一直在尝试一切都无济于事,由于这是我第一次这样做,所以我完全迷失了。非常感谢您的帮助! 更新:这些答案中的一些确实很有帮助,但是对于我所考虑的系统而言,为每个用户手动添加子域不是一个选择。我真正要问的是如何实时执行此操作,并将wildcard.mysite.com重定向到mysite.com/wildcard - Tumblr的设置方式是我想做的一个完美示例。再次感谢! 至于如何设置DNS子域通配符,这将是您的DNS托管提供商的功能。这将是不同的步骤,具体取决于您拥有的托管服务提供商,这将是一个更好的问题。 一旦使用DNS主机设置好了,从您的Web应用程序开始,您实际上只是URL重写,这可以通过Web服务器本身的某种模块来完成,例如isapi rewrite(如果您使用的是IIS)如果可能,将是首选路线)。您还可以在应用程序级别处理重写(例如,如果在ASP.NET上使用路由)。 您将重写URL,以便http://myname.domain.com变为http://domain.com/something.aspx?name=myname或其他名称。从那以后,您就像处理myname值一样正常地处理查询字符串即可。那有意义吗?希望我不要误会你的追求。 编辑: 我不建议您为每个用户创建一个子域,而是为域本身创建一个通配符子域,因此,any.domain.com(基本上是* .domain.com)都将进入您的站点。我使用mydomain设置了多个域。他们的设置说明如下:
我通过这种方式进行了一些设置,*。domain.com进入了我的网站。然后,我可以在Web应用程序中读取基本URL,以查看ryan.domain.com是当前访问的内容,或bill.domain.com是所使用的内容。然后,我可以: 那有意义吗?我以这种确切的方式设置了几个站点:使用DNS主机为域创建通配符,然后简单地读取主机或URL中的基本域,以决定基于子域显示的内容(实际上是用户名) ) 编辑2: 如果没有DNS条目,则无法执行此操作。"在线世界"需要知道name1.domain.com,name2.domain.com,...,nameN.domain.com都进入服务器的IP地址。唯一的方法是使用适当的DNS条目。您必须使用DNS主机为您的域添加通配符DNS条目。然后,您只需从URL中读取子域并在代码中采取适当的措施即可。 如果正在运行* AMP,最好的方法是执行Thomas的建议并在Apache中进行虚拟主机。您可以使用或不使用您描述的重定向来执行此操作。 虚拟主机 您最有可能希望做基于名称的虚拟主机,因为它最容易设置并且只需要一个IP地址(因此在本地MAMP机器上也很容易设置和测试)。基于IP的虚拟主机在其他方面要好一些,但是每个域都必须有一个IP地址。 此Wikipedia页面在底部讨论了区别,并链接到了如何进行基于名称的虚拟主机的基本入门。 在本地计算机上进行测试时,还必须在/ etc / hosts中为假的测试域名设置假的DNS名称。也就是说,如果您让Apache在本地主机上侦听并在Apache配置中设置vhost1.test.domain和vhost2.test.domain,则只需将这些域添加到localhost之后/ etc / hosts中的127.0.0.1行中:
完成/ etc / hosts编辑并将基于名称的虚拟主机配置添加到Apache配置文件后,就是这样,重新启动Apache,您的测试域应该可以正常工作。 使用mod_rewrite重定向 如果您想使用mod_rewrite进行重定向(这样就不会直接托管user.example.com,而是重定向到example.com/user),那么您还需要执行RewriteCond来匹配子域并将其重定向:
您可以将其放在.htaccess或主Apache配置中。
您需要为要重定向的每个子域添加一对规则,例如最后两个规则。或者,您可能能够在RewriteCond中捕获子域,从而能够使用一个通配符规则将* .example.com重定向到example.com/ 一起进行虚拟主机和重定向 最好更加明确,并为要监听的每个主机名设置一个虚拟主机配置部分,并将这些主机名的重写规则放入其虚拟主机配置中。 (如果可以的话,将这种内容放入Apache配置而不是.htaccess中通常会更安全,更快捷-如果您能帮助的话,.htaccess会降低性能,因为Apache会不断地在文件系统中搜索.htaccess文件并进行重新解析,它的安全性较低,因为用户可以将其弄乱。) 这样,Apache配置中的vhost配置将是:
我意识到我对这个问题的回答很晚了,但是在本地开发解决方案方面我遇到了同样的问题。在另一个SO线程中,我找到了更好的解决方案,并认为以后我将与所有人分享相同的问题: VMware拥有的通配符域,可将任何子域解析为127.0.0.1:
或具有更多用途37信号公司拥有一个域,可使用特定格式将任何子域映射到任何给定IP:
有关更多信息,请参见xip.io 我使用的是Ubuntu 16.04,自14.04开始,我在这里使用了Dave Evans提供的解决方案,它对我来说很好用。
安装
使用以下行在
编辑
(您可能会发现该行已经存在,只需要取消注释即可。) 最后一个是重新启动服务
最后,您应该检查它是否有效。
注意:
如果要在Web服务器上使用它,只需将 我必须对我的一个站点执行完全相同的操作。您可以按照以下步骤
如果在服务器上安装了cPanel,请创建一个子域
(如果您使用了cPanel,则无需这样做)。您必须在apache vhosts文件中添加如下所示的内容。这在很大程度上取决于您正在运行的服务器类型(共享或不共享)。以下代码不完整。这只是要方向。注意:
接下来,由于您可以使用PHP脚本检查"主机"标头并找出子域并相应地提供内容。 我为Ubuntu 18.04找到的解决方案与此类似,但是涉及到NetworkManager config:
编辑文件
应该看起来像这样:
开始使用NetworkManager的resolv.conf
使用通配符配置创建文件
重新加载NetworkManager配置
测试一下
您还可以添加任何其他域,这对于使用本地开发设置时的某些类型的身份验证非常有用。
然后工作:
根据我在许多Web主机上看到的内容,它们在apache上设置了虚拟主机。 因此,如果从/ var / www提供www.mysite.com,则可以为每个用户创建一个文件夹。然后将虚拟主机映射到该文件夹??。 这样,mysite.com / user和user.mysite.com都可以工作。 至于您的测试环境,如果您在Windows上,建议您编辑HOSTS文件,以将mysite.com映射到本地PC(127.0.0.1)以及为测试设置的任何子域。
使用虚拟主机可能会更好。这样,每个用户都可以拥有一个非常独立于其他人的Web服务器配置。 语法如下所示:
|