-1

我有一个由discountasp.net(一个标准的.net Web主机)托管的域。称它为http://example.com重写url规则以删除asp.net web.config文件中子目录的外观

该域名托管一个默认网站,再加上有几个独立的网络应用程序。

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

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

我以为我可以用我的Web.config文件中的URL根目录中的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路径(主机之后的部分:端口/)与wordpress/启动时,它消除了wordpress/并继续处理规则,只是在wordpress/之后出现的部分。

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

这工作,在这个意义上,如果我把http://example.com/到浏览器吧,它正确显示的网站,同时该重写不与Web应用程序调用,如http://example.com/nm/干扰......

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

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

另一个线索是,当我使用url http://example.com/about/时,第二个规则似乎没有做它的工作。第二个规则应该使其运行,就好像它是http://example.com/wordpress/about/,但我得到一个404找不到错误。但是,如果我在浏览器栏中放置http://example.com/wordpress/about/,它会正确显示该网页。所以我很困惑。

+0

为什么downvote没有解释? –

回答

0

要回答我的问题,至少部分:

  1. 您不必担心Web.config文件的URL重写规则搞乱了W​​eb应用程序的URL。如果一个URL匹配导致一个Web应用程序,ASP.net将不会应用“一路上”的Web.config url重写规则(例如,如果Web.config位于根目录中),但将使用Web应用程序URL作为-is。

  2. 在“常规设置”下的WordPress管理控制面板可以选择设置wordpress文件的物理目录,也可以设置网址应该如何显示给用户的“虚拟”目录。最好使用这些选项,因为试图用自己的重定向“伪装”wordpress是非常棘手的。