php - 在 IIS 服务器上重写 web.config url 以隐藏 .php 和 .htm 扩展名

标签 php url-rewriting web-config

这是我第一次使用 web.config 进行 URL 重写,以隐藏 IIS 服务器上运行的文件的 .php 和 .htm 扩展名。通过谷歌搜索,我得到了隐藏 profile.htm 和 contact.php 扩展名的代码。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <rewrite>
      <rules>
        <rule name="RewriteRules">
          <match url="profile.htm$" />
          <action type="Rewrite" url="profile" />
          <match url="contact.php$" />
          <action type="Rewrite" url="contact" />
        </rule>
      </rules>
    </rewrite>
</system.webServer>
</configuration>

但是,当我在服务器的根目录中添加此 web.config 文件后,它给了我“500 内部服务器错误”消息,并且所有页面都不起作用。是否有语法错误或其他问题?我可以获得帮助来解决这个问题吗?

另一个问题:我还想链接 .htm 或 .php 代码中的不同页面来隐藏 .htm 或 .php 扩展名。例如,我以前使用 contact 作为 href 链接,现在我想将其指向一个不带扩展名 contact 的目录。 url 重写可以做同样的工作吗?还是我需要做其他事情?

谢谢!

最佳答案

下面是如何做到这一点(它不使用重写映射——仅使用规则,这对于少量重写/重定向来说很好):

此规则将执行一次精确重写(内部重定向)/yourpage 到/yourpage.html。浏览器中的 URL 将保持不变。

<system.webServer>
<rewrite>
    <rules>
        <rule name="SpecificRewrite" stopProcessing="true">
            <match url="^yourpage$" />
            <action type="Rewrite" url="/yourpage.html" />
        </rule>
    </rules>
</rewrite>

301 重定向(永久重定向),其中 URL 将在浏览器中更改

<system.webServer>
<rewrite>
    <rules>
        <rule name="SpecificRedirect" stopProcessing="true">
            <match url="^yourpage$" />
            <action type="Redirect" url="/yourpage.html" />
        </rule>
    </rules>
</rewrite>

如果存在带有 .html 扩展名的文件,则尝试对任何 URL 执行此类重写(即,对于/yourpage,它将检查/yourpage.html 是否存在,如果存在则进行重写):

<system.webServer>
<rewrite>
    <rules>
        <rule name="DynamicRewrite" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{REQUEST_FILENAME}\.html" matchType="IsFile" />
            </conditions>
            <action type="Rewrite" url="/{R:1}.html" />
        </rule>
    </rules>
</rewrite>

关于php - 在 IIS 服务器上重写 web.config url 以隐藏 .php 和 .htm 扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24288371/

相关文章:

c# - 将 asp.net 成员资格 web.config 设置移动到数据库这甚至可能吗?

java - Spring MVC 网站管理/配置页面的推荐数据模型和数据源?

php - Login.php 代码在登录过程中不检索电子邮件

javascript - 使用 jquery 更改 URL 参数或删除 URL 的某些部分

.htaccess - 在 htaccess 中重写 URL 时添加 .html?

asp.net - 创建友好 URL 时如何删除无效字符(即如何创建 slug)?

c# - ConfigurationManager.AppSettings 返回 null

php - 使用 PHP 计算 Oracle 中所选行的数量

php - 更新在 mysql 中不起作用

php - 根据一组禁用词和一组禁用文件扩展名过滤文件名数组