-
09-06-2019 - |
题
我知道已经有几个螺纹在此之前,但是我已经尝试了一切建议(我可以找到)并没有为我工作迄今为止...
考虑到这一点,这里是什么我想要做的:
首先,我要允许用户发布网页,并给予他们的每一个子自己选择的(例如:user.mysite.com).从什么我可以聚集,最好的方式来做到这一点是地图user.mysite.com 要mysite.com/user 与mod_rewrite。就是正确的?
如果这是正确的,可能有人给我的明确说明如何做到这一点?
此外,我在做我所有的发展在当地,使用甲基苯丙胺,所以如果有人能告诉我如何设定了我的当地环境的工作中相同的方式(我已经读到这是更加困难),我将不胜感激。说实话,我已经尝试了一切都无济于事,而且,由于这是我第一次做这样的事情,我完全丧失。谢谢你们任何的帮助!
更新: 这些答复已经非常有帮助,但对该系统我必须铭记,手动增加一个子对每个用户不是一个选项。我真的要问的是如何做到这一点,并重定向wildcard.mysite.com 要mysite.com/wildcard --的方式更棒的是设立是一个完美的例子什么我会这样做。再次感谢!
解决方案
尽可如何设置的DNS子通配符,那将是一个功能DNS托管服务提供商。这将会是不同的步骤取决于其托管服务提供商,你已经和将是一个更好的问题。
一旦你已经设置了DNS主,从你的网页应用程序,你真的只是URL改写,这可以做到的某种模块,用网络服务器本身,如isapi改写如果你在IIS(这将是首选的路线,如果可能)。你也可以把手写的应用程序的水平,以及(如使用路由,如果在ASP.NET).
你要重写URL这样 http://myname.domain.com 会成为 http://domain.com/something.aspx?name=myname 或者什么的。从那里出来,你只是处理它,如果myname值是在查询串作为正常的。这是否有意义吗?希望我没有误解你之后。
编辑:
我不是说你创建的一个子对于每个用户,而是创建一个配符域的域本身,所以 任何东西.domain.com (基本*.domain.com)转到你的网站。我有几个领域设置 程序.他们说明设置这起来是这样的:
是的,你可以配置一个狂野的卡片但是 它只会的工作,如果你将它作为 一个一个的记录。通配符的不工作 C名称。使用通配符的,你 使用astericks character'*'.对于 例如,如果创建和记录 使用野生的卡 .domain.com, 任何东西,是在进入地方 这里的''是的位置,将解决 到指定的IP地址。所以如果你 进入'www','ftp','网站',或 别的什么之前的域名, 它将始终是解决的IP 地址
我有一些是建立在只是这种方式,具有*.domain.com 转到我的网站。然后我可以读取的基址在我的网络应用程序来看看ryan.domain.com 是什么目前正在进行访问的,或者,bill.domain.com 是什么使用。然后我就可以:
- 使用网址重写以便域变成一个部分的查询或串
- 只需阅读该主价值从所访问的网址和执行一些逻辑根据这种价值。
这是否有意义吗?我有几个站点的设立只是这种精确的方式:创建配符域与DNS主机,然后只需阅读机,或基地域从网址的决定是什么,以显示基于域名(实际上是一个用户名)
编辑2:
有没有办法做到这一点没有DNS项。"在线世界"需要知道name1.domain.com,name2.domain.com,...,nameN.domain.com 所有转到IP地址你的服务器。唯一的办法就是使用适当的DNS项。你必须添加的配符DNS条目域与DNS主机。那么它只是一个问题,你读的子从网址和采取适当行动,在你的代码。
其他提示
最好的事情要做,如果你跑*AMP是做什么托马斯建议和做virtual hosts在Apache.你可以做到这一点无论是在有或没有向你描述。
虚拟的主机
最有可能你会想要做的 基于名称的虚拟的主机, ,因为这是最简单的设立和只需要一个IP地址(因此也将方便设立和测试在您的地的甲基苯丙胺机)。基于IP的虚拟举办最好是在一些其他方面,但是你必须要有一个IP地址,用于每一个领域。
此 维基百科页 讨论的差异,以及链接到一个良好的基本的步行通过的如何做到基于名称的虚拟主机的底部。
在本地进行测试,则必须还设立了假的DNS名/etc/主机为你的假试验的域名。即如果你有Apache听上localhost和设立vhost1.测试。域和vhost2.测试。域在Apache配置,你只会添加这些领域的127.0.0.1线/etc/主机,后localhost:
127.0.0.1 localhost vhost1.test.domain vhost2.test.domain
一旦你做/etc/主持编辑和加入的名称为基础的虚拟机配置你Apache configuration file(s),就是这样,重新启动Apache和你的测试域应工作。
重定向与mod_rewrite
如果你想要做的重定向与mod_rewrite(使user.example.com 是不是直接主办并不重要example.com/user),然后你也会需要做的一个重写过匹配域名和重新定向它:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com
RewriteRule ^(.*)$ http://example.com/subdomain$1 [R]
你可以把这个中的一个。就或在您的主Apache配置。
你需要添加一对规则喜欢的最后两个用于每个子你想要重定向。或者,你可能能够捕获域中的一个重写过能够使用一个通配符的规则重新定向*.example.com 要example.com/ *-但那味道真的对我不好从安全角度来看。
所有的在一起,虚拟主机和重定向
最好是更加明确,并设立了一个虚拟机构成部分对于每个hostname你想听,并把重写规则,对每一个这些内部主机名其虚拟机配置。(它是一个更安全和更快的投入这样的东西inside your Apache配置,而不是。不喜欢这里,如果你可以帮助它-.就会降低性能,因为Apache是不断冲刷文件系统。就文件和重新分析将他们,这是不安全,因为这些可以搞砸了通过用户。)
所有共同样的,虚拟主机config inside your Apache配置将是:
NameVirtualHost 127.0.0.1:80
# Your "default" configuration must go first
<VirtualHost 127.0.0.1:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /www/siteroot
# etc.
</VirtualHost>
# First subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
ServerName vhost1.example.com
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/vhost1$1 [R]
</VirtualHost>
# Second subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
ServerName vhost2.example.com
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/vhost2$1 [R]
</VirtualHost>
我意识到我已经很晚回答这个问题,但我有同样的问题在关于地方发展方案。在 另一个这样线 我找到更好的解决方案,并认为我会分享他们的人有同样的问题,在未来:
VMware拥有的野卡域解决的任何子到127.0.0.1:
vcap.me resolves to 127.0.0.1
www.vcap.me resolves to 127.0.0.1
或更多的灵活性37号拥有一个领域,以地图上的任何子的任何给定的IP使用特定的格式:
127.0.0.1.xip.io resolves to 127.0.0.1
www.127.0.0.1.xip.io resolves to 127.0.0.1
db.192.168.0.1.xip.io resolves to 192.168.0.1
看看 xip.io 更多的信息
我在Ubuntu的16.04和自14.04我已经使用方案提供由戴维*埃文斯 在这里, 和它工作正常对我来说。
安装
dnsmasq
sudo apt-get install dnsmasq
创建新的文件
localhost.conf
下/etc/dnsmasq.d
dir与下面一行#file /etc/dnsmasq.d/localhost.conf address=/localhost/127.0.0.1
编辑
/etc/dhcp/dhclient.conf
并添加下面一行prepend domain-name-servers 127.0.0.1;
(你可能会发现这条线已经在那里和你只需要取消它。)
最后一个是重新启动服务
sudo systemctl restart dnsmasq sudo dhclient
最后,你应该检查,如果它的工作。
dig whatever.localhost
注:
如果你要用它在你的网页服务器,需要根本改变 127.0.0.0
你实际的IP地址。
我不得不这样做完全相同的对于我的一个网站。你可以按照下面的步骤
如果你那时在你的服务器上,创建一个子
*
, 如果不,你就必须建立一个记录在您的DNS(用绑见 http://ma.tt/2003/10/wildcard-dns-and-sub-domains/).在你的开发。服务器你会好骗子通过增加每个给你hosts
文件。(如果你用那时你不会有做到这一点).你必须添加件对的事情反而觉得自己像下你apache虚拟主机的文件。它在很大程度上取决于什么类型的服务器(共同或不)。以下代码是不完整的。这只是得到的方向。注:
ServerAlias example.com *.example.com
是重要的。<VirtualHost 127.0.0.1:80> DocumentRoot /var/www/ ServerName example.com ServerAlias example.com *.example.com </VirtualHost>
接下来,由于可以使用PHP script检查"主机"标题和找出的子和服务的内容。
首先,我要允许用户 发布网页,并给他们每人一个 子自己选择的(例如:user.mysite.com).从什么我可以 收集,最好的方式来做到这一点是 地图user.mysite.com 要mysite.com/user 与mod_rewrite。就是 正确的?
你可能会更好利用 虚拟的主机.这样,每个用户可以拥有一个网络服务器结构相当多的独立的其他人。
法是这样的:
<VirtualHost *:80> DocumentRoot /var/www/user ServerName user.mysite.com ... </VirtualHost>
从我所看到的许多主机,他们建立一个虚拟的主机上apache.
所以如果你的www.mysite.com 供应/var/www,您可以创建一个文件夹中的每一个用户。然后地图的虚拟机到该文件夹。
那两个mysite.com/user 和user.mysite.com 工程。
作为你的测试环境,如果你是在windows,我会建议编辑文件的主要地图mysite.com 给你地方电脑(127.0.0.1),以及任何域设置进行测试。
解决我发现为Ubuntu18.04是类似于 这一个 但是涉及管理器配置:
编辑的文件
/etc/NetworkManager/NetworkManager.conf
, 并添加的线路dns=dnsmasq
来的[main]
部分sudo editor /etc/NetworkManager/NetworkManager.conf
应该是这样的:
[main] plugins=ifupdown,keyfile dns=dnsmasq ...
开始使用网络管理器的resolv.conf
sudo rm /etc/resolv.conf sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
创建一个文件与你通配符的配置
echo 'address=/.localhost/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/localhost-wildcard.conf
重新装配置管理器
sudo systemctl reload NetworkManager
测试它
dig localdomain.localhost
你还可以添加任何其他领域,很可用于某些类型的认证当使用当地的发展设置。
echo 'address=/.local-dev.workdomain.com/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/workdomain-wildcard.conf
那么这个工作:
dig petproject.local-dev.workdomain.com
;; ANSWER SECTION:
petproject.local-dev.workdomain.com. 0 IN A 127.0.0.1