【问题标题】:Subdomain URL Rewriting and Web Apps子域 URL 重写和 Web 应用程序
【发布时间】:2011-02-20 02:27:08
【问题描述】:

所以很多网络应用程序让客户选择自己的子域,即 mycompany.webapp.com

可能每个子域都使用相同的文件集,并且唯一的子域可能存储为会话对象。那么 URL 重写是如何工作的呢?

如果有人去mycompany.webapp.com,你必须将他们的唯一地址重写为动态页面来设置会话变量,即webapp.com/mypage.php?cusomer=mycompany

但是当您重定向时,您将位于 webapp.com/theappdirectory/ 而不是 mycompany.webapp.com/

那么他们是怎么做到的呢?

PS 运行 IIS,但任何服务器的方法都应该相同。对我们来说最重要的是我们不能做 webapp.com/theappdirectory/mycompany/somefile.html,即所有文件都驻留在一个目录中,我们必须以某种方式设置会话变量,同时保持子域被屏蔽。

【问题讨论】:

    标签: mod-rewrite url-rewriting subdomain wildcard-subdomain wildcard-mapping


    【解决方案1】:

    重定向只能在内部发生:

    RewriteCond %{HTTP_HOST} ^([^./]+)\.example\.com$
    RewriteCond %1 !=www
    RewriteRule ^ mypage.php?customer=%1
    

    要进行这项工作,您的服务器/虚拟主机需要配置为接受所有子域(例如,参见 Name-based Virtual Host Support)。

    【讨论】:

    • 这会掩盖子域吗?因此,即使您在说 webapp.com/theappdirectory/somepage.html,您仍然会像浏览它一样浏览它是 mycompany.webapp.com。 html
    • @Igor K:由于重定向只是内部的,实际位置没有显示。但这仍然允许直接请求实际文件。
    【解决方案2】:

    任何网址(包括子域)都使用 DNS 映射到 IP 地址。

    1. 现在,这些地址可以映射到单独的 Web 服务器,您可以在其中将 documentroot 设置为您想要的任何内容。

    2. 但是当多个域/子域托管在同一台物理机器上时,您的问题是有意义的。如果您使用的是 apache,则可以使用此虚拟主机设置,在逻辑上划分托管在同一服务器上的不同域。它基本上将主机地址(如 x.example.com、y.example.com)或 IP 地址映射到设置初始参数(如 DocumentRoot、PHPAdmin 值)的虚拟主机..

    查看http://httpd.apache.org/docs/2.0/vhosts/examples.htmlhttp://httpd.apache.org/docs/1.3/vhosts/ 了解更多信息

    【讨论】:

    • 谢谢,但我知道我有一个通配符让所有子域都指向同一个服务器,我想知道它们如何在仍然共享 Web 应用程序的同一组文件的同时保持子域被屏蔽。
    猜你喜欢
    • 2012-10-02
    • 2012-12-24
    • 2011-03-05
    • 2012-04-03
    • 1970-01-01
    • 2012-09-17
    • 2012-01-03
    • 2013-07-27
    • 2015-08-01
    相关资源
    最近更新 更多