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

时间:2014-06-18 14:35:05

标签: 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扩展名。例如,我以前使用联系人来进行href链接,现在我想将它指向一个没有扩展联系人的目录。网址重写是否可以完成相同的工作,还是我需要做其他事情?

谢谢!

1 个答案:

答案 0 :(得分:3)

下面是你如何做到的(它不使用重写地图 - 仅限规则,这对少量重写/重定向很好):

此规则将对/yourpage.html执行SINGLE EXACT重写(内部重定向)/ yourpage。浏览器中的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>