繁体   English   中英

重写 url 规则以删除 asp.net web.config 文件中子目录的出现

[英]rewrite url rules to remove appearance of subdirectory in asp.net web.config file

我有一个由 discountasp.net(一个标准的 .net 网络主机)托管的域。 称之为http://example.com

该域托管一个默认网站,另外还有几个单独的 Web 应用程序。

该网站是在 Wordpress 中创建的,它位于主机上域根目录的 /wordpress 子目录中。

我想让用户在浏览器中看到的 URL 中没有 /wordpress 。 以前,根目录中有一个 index.html 文件,可以将http://example.com/ 的请求重定向到http://example.com/wordpress/ 但这当然只是一个重定向,并将http://example.com/wordpress/留在浏览器 URL 栏中。

我以为我可以通过根目录中的 Web.config 文件中的 URL 重写规则实现我想要的。 以下是该文件的文本。

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="wordpress redirect a"> <match url="wordpress/(.*)"/> <action type="Rewrite" url="{R:1}"/> </rule> <rule name="wordpress redirect b"> <match url=".*"/> <conditions> <add input="{REQUEST_URI}" pattern=".*nm.*" matchType="Pattern" negate="true" ignoreCase="false"/> <add input="{REQUEST_URI}" pattern=".*survey.*" matchType="Pattern" negate="true" ignoreCase="false"/> </conditions> <action type="Rewrite" url="wordpress/{R:0}"/> </rule> </rules> </rewrite> </system.webServer> </configuration>

该文件的逻辑是:

  • 第一条规则:如果 url 路径(host:port/ 之后的部分)以wordpress/开头,它会删除wordpress/并继续处理wordpress/之后的部分的规则。

  • 第二条规则:对于任何不包含特殊 Web 应用程序字符串“nm”或“survey”的 url 路径,将wordpress/放在路径的前面。

这是有效的,从某种意义上说,如果我将http://example.com/放入浏览器栏中,它会正确显示网站,而且这种重写不会干扰诸如http://example.com 之类的 Web 应用程序调用/纳米/ ...

但是,它仍然在用户看到的 URL 中留下 /wordpress(即,当我将http://example.com/放在浏览器栏中时,我最终会在浏览器中看到http://example.com/wordpress/在重写/重定向它所做的任何事情之后,栏。可能是我只是误解了重写规则的作用。但我的理解(以及我试图用这些规则实现的目标)是任何传入的 URL(除了我的特殊 Web 应用程序 URL) ) 不包括wordpress/将在内部处理,就好像它确实包括/wordpress ,但随后作为不包括/wordpress的原始 URL 返回给客户端。所以,不是重定向,只是一些内部伪造。然后是第一条规则是否存在是因为网站内的链接将包含/wordpress ,并且由于我不想获得/wordpress/wordpress ,我需要在添加之前将其剥离。

但显然我误解了一些东西。

另一个线索是,当我使用 url http://example.com/about/时,第二条规则似乎并没有发挥作用。 第二条规则应该使它像http://example.com/wordpress/about/ 一样运行,但我收到了 404 not found 错误。 但是如果我将http://example.com/wordpress/about/放在浏览器栏中,它会正确显示该网页。 所以我很困惑。

至少部分回答我自己的问题:

  1. 您不必担心 Web.config url 重写规则会弄乱 Web 应用程序 url。 如果 URL 匹配导致 Web 应用程序,ASP.net 将不会“一路”应用 Web.config url 重写规则(例如,如果 Web.config 在您的根目录中),但会使用 Web 应用程序 URL 作为-是。

  2. Wordpress 管理控制面板在“常规设置”下,可以选择设置 wordpress 文件的物理目录,以及 URL 应如何向用户显示的“虚拟”目录。 最好使用这些选项,因为尝试使用自己的重定向来“伪造”wordpress 是很棘手的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM