首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IIS用子文件夹重写SEF Urls

IIS用子文件夹重写SEF Urls
EN

Stack Overflow用户
提问于 2019-02-20 18:50:05
回答 2查看 121关注 0票数 0

我到处找了很久,没有任何运气,所以决定是时候问了。

我遇到了客户想要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将自动添加尾随斜杠。

例如结构

代码语言:javascript
复制
>wwwroot
    -index.html
    -foo.html
    -sef_rewriting.html
    >sef_rewriting
         -removing_file_extensions.html

如何创建一个规则来检查所请求的无扩展名URL是否匹配具有指定扩展名的文件,比如在本例中(html)并提供该文件,并且只有当该文件不存在时,IIS才会重定向到子目录?

我在网上发现了以下规则,它适用于基本情况,但不适用于与文件同名的子目录。

代码语言:javascript
复制
<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>

任何帮助都将不胜感激..。

注意:文件和目录命名方案不能更改。

更新:为清晰起见编辑

规则必须处理以下条件

  1. www.mysite.com -服务index.html
  2. www.mysite.com/foo - serve foo.html
  3. www.mysite.com/sef_rewriting - serve sef_rewriting.html
  4. www.mysite.com/sef_rewriting/removing_file_extensions -服务removing_file_extensions.html
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-22 14:06:10

在许多人的帮助下,在htaccess导入向导(甚至不知道存在!)的帮助下,我回答了我自己的问题。

代码语言:javascript
复制
<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是否存在,如果是,则检查是否存在。

票数 0
EN

Stack Overflow用户

发布于 2019-02-22 08:04:02

根据您的描述,我建议您可以使用下面的url重写规则。

代码语言:javascript
复制
<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重写来设置索引页。

代码语言:javascript
复制
<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> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54793309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档