我到处找了很久,没有任何运气,所以决定是时候问了。
我遇到了客户想要SEF urls的情况
www.somesite.com/sef_rewriting
www.somesite.com/foo
工作正常-问题是,如果sef_rewriting也可以是一个目录,会发生什么?
www.somesite.com/sef_rewriting/removing_file_extensions
如果有人请求以下url:www.somesite.com/sef_rewriting并将其重定向到子目录,IIS将自动添加尾随斜杠。
例如结构
>wwwroot
-index.html
-foo.html
-sef_rewriting.html
>sef_rewriting
-removing_file_extensions.html如何创建一个规则来检查所请求的无扩展名URL是否匹配具有指定扩展名的文件,比如在本例中(html)并提供该文件,并且只有当该文件不存在时,IIS才会重定向到子目录?
我在网上发现了以下规则,它适用于基本情况,但不适用于与文件同名的子目录。
<rule name="SEF REWRITE html">
<match url=".*" negate="false" />
<conditions>
<add input="{URL}" pattern="(/[^.]*|\.(html))$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="{C:0}.html" />
</rule>任何帮助都将不胜感激..。
注意:文件和目录命名方案不能更改。
更新:为清晰起见编辑
规则必须处理以下条件
发布于 2019-02-22 14:06:10
在许多人的帮助下,在htaccess导入向导(甚至不知道存在!)的帮助下,我回答了我自己的问题。
<rule name="SEF RULE 1" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}.html" matchType="IsFile" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="{R:1}.html" />
</rule>
<rule name="SEF Rule 2" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}/index.html" matchType="IsFile" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="{R:1}/index.html" />
</rule>规则1:检查是否存在具有定义扩展名的文件,如果该文件存在,则为该文件服务。
规则2:在请求目录时检查“默认”文件是否存在,例如www.mysite.com/将检查www.mysite.com/index.html是否存在,如果是,则检查是否存在。
发布于 2019-02-22 08:04:02
根据您的描述,我建议您可以使用下面的url重写规则。
<system.webServer>
<rewrite>
<rules>
<rule name="SEF REWRITE html" >
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" >
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="{R:0}.html" />
</rule>
</rules>
</rewrite>
</system.webServer>结果:

但在网址中输入站点名,网站将无法工作。
我建议您也可以添加下面的url重写来设置索引页。
<rule name="showindex" stopProcessing="true">
<match url=".*"/>
<conditions>
<add input="{HTTP_HOST}" pattern="^([a-z]+[.]com)$"/>
</conditions>
<action type="Rewrite" url="http://www.{C:0}/{R:0}/index.html" redirectType="Permanent"/>
</rule> https://stackoverflow.com/questions/54793309
复制相似问题