如何用.htaccess在PHP中配置URL重写规则实现URL美化
实现URL重写的两种方案
首先确保你的Apache服务器已启用mod_rewrite模块(绝大多数虚拟主机默认开启),然后在根目录的.htaccess文件中添加对应规则即可,以下是两种需求的实现方案:
方案一:重写为 www.dawsonautodetailing.com/page/About-Us
将下面的代码添加到.htaccess中:
# 开启URL重写引擎 RewriteEngine On # 匹配带page参数的原URL,并重定向到友好URL RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} ^page=([^&]+)$ RewriteRule ^$ /page/%1? [L,R=301] # 处理反向访问:用户访问友好URL时,内部转发到原动态URL RewriteRule ^page/([^/]+)$ /?page=$1 [L]
代码说明:
RewriteEngine On:必须放在最开头,开启Apache的URL重写功能。RewriteCond %{REQUEST_METHOD} GET:只对GET请求生效,避免干扰POST等其他请求类型。RewriteCond %{QUERY_STRING} ^page=([^&]+)$:精准匹配查询字符串为page=xxx的格式,([^&]+)会捕获page参数的具体值(比如About-Us)。RewriteRule ^$ /page/%1? [L,R=301]:将根目录下的原URL(如/?page=About-Us)永久重定向到/page/About-Us;?用于清除原查询字符串,R=301是永久重定向(对SEO友好),L表示执行完这条规则后不再继续处理后续规则。- 最后一条规则是内部转发:当用户直接访问
/page/About-Us时,服务器会在内部悄悄转发到原动态URL/?page=About-Us,用户看不到这个过程,只看到友好的URL。
方案二:重写为 www.dawsonautodetailing.com/About-Us
如果不需要page前缀,直接用参数值作为路径,使用下面的代码:
# 开启URL重写引擎 RewriteEngine On # 重定向原URL到无前缀的友好URL RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} ^page=([^&]+)$ RewriteRule ^$ /%1? [L,R=301] # 反向内部转发 RewriteRule ^([^/]+)$ /?page=$1 [L]
代码说明:
- 核心逻辑和方案一一致,只是重定向目标改为
/%1(直接使用捕获的参数值作为根目录下的路径),反向规则匹配根目录下的任意单段路径(如About-Us),转发到对应的动态URL。
注意事项:
- 测试阶段可以将
R=301改成R=302(临时重定向),确认规则生效后再改回301,避免浏览器缓存错误的重定向规则。 - 如果你的网站还有其他
.htaccess规则(比如CMS的重写规则),要把这些规则放在其他规则的前面,避免冲突。 - 修改
.htaccess后,记得清空浏览器缓存再测试,确保看到最新的重定向效果。
内容的提问来源于stack exchange,提问作者A.Tesma
相关产品推荐
相关产品推荐

