永久删除带有 Web 配置的 HTML 扩展

Posted

技术标签:

【中文标题】永久删除带有 Web 配置的 HTML 扩展【英文标题】:Remove HTML extension with web config permanently 【发布时间】:2013-11-07 00:43:42 【问题描述】:

我正在尝试使用 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 扩展,但是这里似乎有 2 个问题:

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

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

请指教。

谢谢

【问题讨论】:

【参考方案1】:

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

    <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>

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

【讨论】:

【参考方案2】:

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

<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>

【讨论】:

完美.. 节省了大量时间 如果您想在每个网站的基础上执行此操作,您只需将其放在虚拟目录根目录下的 web.config 中即可。我也会添加完整的回复...【参考方案3】:

如果您想在 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>

【讨论】:

在重定向规则上使用更好的正则表达式更新我的回复,因此它只匹配以 html 结尾的文件,而不是(嗯)标题中带有 html 的 css 文件......

以上是关于永久删除带有 Web 配置的 HTML 扩展的主要内容,如果未能解决你的问题,请参考以下文章

如何在 web.config 中配置 301 永久重定向?

Git 清除历史已提交文件永久删除文件

Nginx 服务器 高性能 web 视频教程 大数据 集群 NoSQL 配置 安装

扩展和删除工具栏按钮

永久添加/删除tkinter列表框中的项目

linux6配置永久IP报错