16

我正在尝试使用 web.config 从页面中删除 html 扩展名。下面是我在 web.config 文件中使用的代码

<rewrite>
  <rules>
    <rule name="rewrite html">
      <match url="(.*)$" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{REQUEST_FILENAME}" negate="true" pattern="(.*).html" />
      </conditions>
      <action type="Rewrite" url="{R:1}.html" />
    </rule> 
  </rules>
</rewrite>

它工作正常并删除了 html 扩展名,但是这里似乎有两个问题:

  1. 当我输入“斜线”时,它不起作用并且给了我未找到的错误。例如:http://example.com/my-page/现在它不会工作,但我http://example.com/my-page说它会工作正常,所以我希望他们两个都工作

  2. 另一个问题是.html页面仍在打开。例如,如果我打开页面,因为http://example.com/my-page.html它也在工作,但我希望它http://example.com/my-page自动转换,我知道我可以为此使用 301 重定向,但这不起作用,因为这里有很多文件,所以我必须使用不同的针对不同 URL 的 301 规则。

请指教。

谢谢

4

3 回答 3

30

从 url替换的URLRewrite 2.0 规则(将此部分插入system.webServer节点内) :.html

<rewrite>
    <rules>
        <rule name="Hide .html ext">
            <match ignoreCase="true" url="^(.*)"/>
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                <add input="{REQUEST_FILENAME}.html" matchType="IsFile"/>
            </conditions>
            <action type="Rewrite" url="{R:0}.html"/>
        </rule>
        <rule name="Redirecting .html ext" stopProcessing="true">
            <match url="^(.*).html"/>
            <conditions logicalGrouping="MatchAny">
                <add input="{URL}" pattern="(.*).html"/>
            </conditions>
            <action type="Redirect" url="{R:1}"/>
        </rule>
    </rules>
</rewrite>
于 2016-02-20T13:13:02.383 回答
2

如果您想在 Windows 10 上使用本地 IIS 服务器在每个网站上执行此操作,请安装 URL 重写模块,然后将其放入虚拟目录根目录的 web.config 中:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <remove name="Redirecting .html ext" />
                <remove name="Hide .html ext" />
                <rule name="Hide .html ext" enabled="true">
                    <match url="^(.*)" ignoreCase="true" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <add input="{REQUEST_FILENAME}.html" matchType="IsFile" />
                    </conditions>
                    <serverVariables />
                    <action type="Rewrite" url="{R:0}.html" />
                </rule>
                <rule name="Redirecting .html ext" enabled="true" stopProcessing="true">
                    <match url="^(.*).html" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{URL}" pattern="^(.*)\.html$" />
                    </conditions>
                    <serverVariables />
                    <action type="Redirect" url="{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
于 2020-06-21T16:56:49.170 回答
0

我知道这几乎是一年后,但我会尝试。我不确定我是否正确理解了您的问题,但如果我这样做了,我就使用

    <system.webServer>
     <caching>
      <profiles>
       <remove extension=".php" />
       <remove extension=".html" />
       <add extension=".html" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="23:59:59" varyByQueryString="*" />
       <add extension=".php" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="00:00:30" varyByQueryString="*" />
             </profiles>
             </caching>
             <directoryBrowse enabled="false" />
             <defaultDocument>

然后是您正在使用的其余结束语句。

于 2014-09-24T06:23:39.163 回答