配置php url重写规则的关键在于安装url rewrite模块、创建或修改web.config文件、编写重写规则、保存并测试。1. 安装url rewrite模块:通过“控制面板”-“程序”-“启用或关闭windows功能”,找到iis相关选项并勾选“url重写”进行安装。2. 创建或修改web.config文件:在网站根目录下找到该文件,若无则新建,并在其内配置重写规则。3. 编写重写规则:在web.config的<system.webserver>节点下添加<rewrite>和<rules>节点,例如将http://localhost/product.php?id=123重写为http://localhost/product/123可通过正则表达式匹配并重定向。4. 保存并测试:访问测试链接验证规则是否生效,否则排查配置问题。常见失败原因包括iis配置错误、web.config语法或规则冲突、php代码问题等,需逐一排查确保模块安装正确、规则无误、参数传递合理。此外,还可通过类似方法实现多级目录映射或自定义路由等复杂结构。

配置PHP URL重写规则,说白了,就是让你的网站链接看起来更漂亮、更友好,对搜索引擎也更友好。Windows 11下,这事儿主要涉及修改IIS的配置。听起来好像很复杂,但其实一步一步来,也没那么难。

解决方案
安装URL Rewrite模块:
首先,确认你的IIS(Internet Information Services)管理器里安装了URL Rewrite模块。如果没有,打开“控制面板” -> “程序” -> “启用或关闭Windows功能”,找到“Internet Information Services” -> “万维网服务” -> “常用HTTP功能”,勾选“URL重写”并安装。这步是基础,没有它,后面的都白搭。
创建或修改web.config文件:
在你的网站根目录下(比如C:\inetpub\wwwroot\你的网站),找到web.config文件。如果没有,就新建一个。这个文件是IIS的配置文件,URL重写规则就写在这里面。
编写重写规则:
打开web.config,在<system.webServer>节点下添加<rewrite>节点,并在<rewrite>节点下添加<rules>节点。然后,就可以在<rules>里添加你的重写规则了。

一个简单的例子,假设你想把http://localhost/product.php?id=123重写成http://localhost/product/123:
立即学习“PHP免费学习笔记(深入)”;
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Rewrite Product URL" stopProcessing="true">
<match url="^product/([0-9]+)$" />
<action type="Rewrite" url="product.php?id={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration><match url="^product/([0-9]+)$" />:这部分定义了匹配的URL模式。^表示URL的开始,product/是字面字符串,([0-9]+)表示匹配一个或多个数字,并将其捕获到{R:1}中,$表示URL的结束。<action type="Rewrite" url="product.php?id={R:1}" />:这部分定义了如何重写URL。type="Rewrite"表示进行URL重写,url="product.php?id={R:1}"表示将匹配到的数字作为id参数传递给product.php。保存并测试:
保存web.config文件,然后在浏览器中访问http://localhost/product/123,看看是否能正确显示product.php?id=123的内容。如果不行,检查你的规则是否有误,或者IIS是否正确加载了web.config文件。
启用PHP错误显示:
在php.ini文件中,找到display_errors,确保它设置为On。这样,如果PHP代码有错误,会在浏览器中显示出来,方便调试。
PHP URL重写失败的常见原因及排查方法
URL重写失败的原因可能有很多,我踩过的坑也不少。最常见的就是IIS配置问题,其次是web.config文件写错了,还有可能是PHP代码本身有问题。
IIS配置问题:
web.config: 检查IIS管理器中,你的网站是否正确配置,并且web.config文件是否位于网站根目录下。有时候,权限问题也会导致IIS无法加载web.config。.NET CLR Version v4.0,并且“托管管道模式”设置为“集成”。web.config文件错误:
web.config是一个XML文件,任何语法错误都会导致IIS无法加载它。使用XML编辑器检查语法错误,或者在线XML校验工具。match url和action url的模式匹配正确。可以使用在线正则表达式测试工具来验证你的正则表达式是否正确。PHP代码问题:
php.ini中启用错误显示。$_GET参数获取错误: 确保你的PHP代码正确获取了通过URL传递的参数。例如,如果你的URL是http://localhost/product/123,并且你希望通过$_GET['id']获取123,那么你的重写规则必须正确地将123作为id参数传递给PHP。如何使用URL重写实现更复杂的URL结构
URL重写不仅仅可以用来简化URL,还可以用来实现更复杂的URL结构,比如多级目录、自定义路由等等。
多级目录:
假设你想把http://localhost/category/electronics/product/123重写成http://localhost/index.php?category=electronics&product_id=123:
<rule name="Rewrite Multi-Level URL" stopProcessing="true">
<match url="^category/([a-zA-Z0-9]+)/product/([0-9]+)$" />
<action type="Rewrite" url="index.php?category={R:1}&product_id={R:2}" />
</rule>在这个例子中,([a-zA-Z0-9]+)匹配一个或多个字母或数字,{R:1}和{R:2}分别表示第一个和第二个匹配到的内容。
自定义路由:
你可以使用URL重写来实现自定义路由,将不同的URL映射到不同的PHP文件或函数。例如,你可以把http://localhost/about映射到about.php,把http://localhost/contact映射到contact.php:
<rule name="Rewrite About Page" stopProcessing="true"> <match url="^about$" /> <action type="Rewrite" url="about.php" /> </rule> <rule name="Rewrite Contact Page" stopProcessing="true"> <match url="^contact$" /> <action type="Rewrite" url="contact.php" /> </rule>
这样,你就可以根据自己的需求,灵活地定义URL结构。
以上就是如何用Windows 11配置PHP URL重写规则 PHP伪静态配置与调试方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号