假设您在IIS 7上托管Wordpress并且想要激活永久链接。查看codex here,您将看到要添加到<system.webServer>
标记中的web.config文件(位于WordPress安装的根目录)的示例代码:
<rewrite>
<rules>
<rule name="Main Rule" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
一切都很顺利,网址重写规则的条件正确地忽略了系统中存在的现有文件和文件夹。
但是,你可能会像我一样,在某个子文件夹中忽略每个uri,即使文件系统上没有相应的文件。在我的情况下,我在一个子目录/Services/
中使用web.config的<serviceActivations>
区域(在子目录中)以下列形式托管一组WCF服务:
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
<serviceActivations>
<add factory="System.ServiceModel.Activation.ServiceHostFactory" relativeAddress="./AccountService.svc" service="MyAssembly.Services.AccountService"/>
</serviceActivations>
</serviceHostingEnvironment>
导航到AccountService.svc
会导致找不到404。
你怎么能处理这种情况?下面我发布了我的具体解决方案,但还有其他方法可以实现这一目标。此外,一般案例解决方案仍然难以捉摸,所以问题仍然存在,你如何处理这种情况呢?
答案 0 :(得分:0)
以下我提供了我的解决方案作为URL Rewrite世界的完全新手。该解决方案特定于特定文件夹。
要解决我的问题,必须为重写规则添加一个附加条件:
<rewrite>
<rules>
<rule name="Main Rule" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/Services/.*" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
在您的情况下,将我的文件夹名称替换为&#34;服务&#34;就够了。
如果要对任何目录或目录层次结构执行此操作,如果存在目录层次结构,则允许包含该目录层次结构的任何URL通过而不进行重写。到目前为止,我对此的尝试主要围绕匹配包含目录层次结构的url部分,并使用后引用来检测此目录是否存在:
<rule name="ignoreSubDirectoryURIs" stopProcessing="true">
<match url="(.*)/.*\..*" ignoreCase="false" />
<conditions>
<add input="{APPL_PHYSICAL_PATH}\{R:1}\" matchType="IsDirectory" />
</conditions>
<action type="None" />
</rule>
首先添加此规则,以便在成功时不解释其他重写规则。
问题:虽然{APPL_PHYSICAL_PATH}
是一个目录,但我无法正确解析{APPL_PHYSICAL_PATH}
和子目录的任意组合。另一个问题是嵌套目录,其中{R:1}
将返回dir1 / dir2,而不是dir1 \ dir2,这可能使这不适用于嵌套的情况。
如果不完整,阅读URL Rewrite Reference一直是有益的