在 IIS7 上使用 web.config 删除 .php 扩展名

Posted

技术标签:

【中文标题】在 IIS7 上使用 web.config 删除 .php 扩展名【英文标题】:Remove .php extensions with web.config on IIS7 【发布时间】:2012-09-08 16:46:35 【问题描述】:

我有一个 .htaccess 文件,它从文件中删除 .php 扩展名,例如将 so.com/question.php 转换为 so.com/问题,并重定向文件夹中的索引文件,例如so.com/answer/index.php 完全按照in this answer

的描述重定向到 so.com/answer/

我刚刚在 IIS7 上本地设置了我的网站,需要在 web.config 中重新创建相同的行为,但不知道从哪里开始转换/重写 .htaccess 文件。

【问题讨论】:

【参考方案1】:

我发现IIS7及以上可以使用URL Rewrite模块导入Apache .htaccess规则。

    通过Microsoft Web 平台安装程序安装URL Rewrite module 启动 IIS 管理器,然后在左侧的“连接”窗格中,选择所需的站点(例如默认网站) 在中心(功能视图)双击URL Rewrite。 在右侧面板中单击导入规则...,然后将 .htaccess 文件中的规则粘贴到 重写规则 框中 点击右栏中的应用。

在上面的特定问题中使用以下 .htaccess 重定向规则

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

生成以下 web.config 文件。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Imported Rule 1" stopProcessing="true">
                    <match url="^(.*)$" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="REQUEST_FILENAME" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="REQUEST_FILENAME.php" matchType="IsFile" ignoreCase="false" />
                    </conditions>
                    <action type="Rewrite" url="R:1.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

【讨论】:

以上是关于在 IIS7 上使用 web.config 删除 .php 扩展名的主要内容,如果未能解决你的问题,请参考以下文章

从 iis7 中的 wordpress URL 中删除 index.php

IIS7,web.config 只允许在网站的 /uploads 目录中使用静态文件处理程序

IIS7.5使用web.config设置伪静态的方法

Web 应用程序问题(web.config 错误)HTTP 500.19 与 IIS7.5 和 ASP.NET v2

IIS7IIS7.5 通过WEB.CONFIG自定义404页面 返回404状态

Web.config上写入权限的安全问题