这是我第一次使用 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/