这是我第一次使用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链接,现在我想将它指向一个没有扩展联系人的目录。网址重写是否可以完成相同的工作,还是我需要做其他事情?
谢谢!
答案 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>