我四处搜寻,没有任何运气,所以决定是时候问了。
我遇到客户想要SEF网址的情况
www.somesite.com/sef_rewriting
www.somesite.com/foo
工作正常-问题是如果sef_rewriting
也可以是目录会发生什么情况?
www.somesite.com/sef_rewriting/removing_file_extensions
如果有人请求以下URL,则IIS将自动添加一个斜杠:www.somesite.com/sef_rewriting
并重定向到该子目录。
例如结构
>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>
任何帮助将不胜感激。
注意:文件和目录的命名方案不能更改。
更新:为清楚起见而编辑
规则必须满足以下条件
答案 0 :(得分:0)
根据您的描述,我建议您可以使用以下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>
结果: https://developers.line.biz/en/docs/
但是在网址中输入站点名称后,该站点将无法正常工作。
我建议您也可以在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>
答案 1 :(得分:0)
在许多人的帮助下,我有了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是否存在,如果可以,则为您服务。