【发布时间】:2014-07-03 05:09:50
【问题描述】:
好的。在潜伏了几年并感谢愿意提供帮助的人们之后,我的第一个问题是,因此感谢您对我的新手和不准确的术语的耐心等待。
我继承了一份工作和一个项目,其中用户拥有自己的子域,其中包含一组 4-5 个模板 php 页面,其中存储在 mysql 数据库中的半可定制内容。它应该在它出现之前工作,现在它没有,所以我正在尝试调试整个事情,因为我必须为另一个域复制项目,所以我来找你,我的大师,经过几个小时的研究,来自互联网的死胡同和半真半假。
我浏览过IIS URL Rewrite 页面,环顾四周和其他地方,但我只是感到困惑。
我正在尝试为越来越多的用户完成以下任务:
bubba.example.com ===>example.com/users/index.php?c=bubba
bubba.example.com/about.php ===> example.com/users/about.php?c=bubba bubba.example.com/contact.php ===> example.com/users/contact.php?c=bubba
等等...但无论用户名/子域名或模板站点如何,我每次都会收到 404 错误。一些背景资料:
- 使用 IIS 7.5 和 URL 重写模块从同一 IP 运行多个域/站点(主要是 PHP)
- IIS 中的默认网站/直接 IP 指向我们主要公司的网站。
- 域的DNS区域文件有“*”和“@”的A记录指向网络服务器的IP
- 我们确实为我们自己的子域指定了其他 CNAME 条目,例如 ftp、stmp、pop、admin 等。
- 此域的根文件夹中的 web.config
我已经通过 web.config 和 IIS 面板获得了第一条规则的多个版本,这只是最新版本,我知道它不起作用:
<rule name="User Sites" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="true">
<add input="{HTTP_HOST}" pattern="^(\w+)\.(example\.com)$" />
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
</conditions>
<action type="Rewrite" url="http://(C:1)/users/{R:0}?c={C:0}" logRewrittenUrl="true" />
</rule>
我的下一步是为每个模板页面设置规则,如下所示(可能没有正确的正则表达式,但你明白了:
<rule name="User about page" stopProcessing="true">
<match url="^about\.php$" />
<conditions trackAllCaptures="true">
<add input="{HTTP_HOST}" pattern="^(\w+)\.(example\.com)$" />
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
</conditions>
<action type="Rewrite" url="http://(C:1)/users/about.php?c={C:0}" logRewrittenUrl="true" />
</rule>
我们将不胜感激,即使是朝着正确的方向推进
编辑:
好的,所以现在真的是关键时刻,但仍然没有明确的答案。
这是我最新的规则,但它仍然不起作用......
<rule name="rewrite">
<match url="(.*)?" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(?!www)(.*)\.(.*\.c.*)$" />
</conditions>
<action type="Rewrite" url="http://www.{C:3}/users/{R:0}\?c={C:1}" appendQueryString="true"
</rule>
我意识到这太过分了,因为它不仅限于我想要重写的 2 个域,但我需要一些功能才能改进,但这仍然无法正常工作。
【问题讨论】:
-
IIS 上的绑定是什么样的?您可以通过右键单击站点并选择
Edit Bindings...,然后选择http 绑定并单击Edit或从applicationHost.config下的bindinfInformation标签来获得它。同时,您可以做的另一件事来帮助您调试是enabling FREB,并查看每个请求生成的错误日志。您将能够看到 url 被重写为什么以及 IIS 中的哪个模块返回 404 -
抱歉耽搁了。绑定不是什么花哨的东西:http example.com 80 * http www.example.com 80 * https [blank] 443 *
-
我在故障排除时确实发现了一些奇怪的东西:如果我使用 https 而不是普通的 http 请求访问它们,我的用户站点就很好。我在想这是因为我的 https 绑定没有设置特定的主机名,因此正在考虑并随后处理完整的 HTTP_HOST ...我不能为 http 输入空白主机绑定,因为我还有其他几个站点这个服务器,我需要设置这个站点的第二个版本(即 exampleABC.com),它需要相同的功能......让我好奇。
标签: iis url-rewriting iis-7.5 subdomain multiple-domains