You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用mod_rewrite时如何用.htaccess实现URL伪静态跳转并避免无限循环

解决mod_rewrite的.html与.php互转无限循环问题

你的规则出现无限循环的核心原因是:没有区分用户的外部请求和服务器内部的重写操作。当用户访问.php文件被重定向到.html后,服务器内部又把.html重写为.php,这时候第二条规则会再次触发,把内部重写的.php又重定向回.html,反复循环。

修正后的规则如下,完美实现你的需求:

RewriteEngine On

# 仅对用户直接发起的.php请求进行重定向,避免内部重写触发循环
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.php\ HTTP/
RewriteRule ^(.*)\.php$ $1.html [R=307,L]

# 当请求.html文件时,内部加载对应的.php(需确保.php文件存在)
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)\.html$ $1.php [L]

规则说明:

  • 第一条规则通过%{THE_REQUEST}判断原始请求:这个变量记录的是用户实际发送的请求行(比如GET /file.php HTTP/1.1),只有用户直接访问.php时才会触发重定向,服务器内部重写产生的.php请求不会触发这条规则,彻底避免循环。
  • 第二条规则增加了%{DOCUMENT_ROOT}/$1.php -f条件:确保要重写的.html对应的.php文件确实存在,避免不存在的页面被错误处理。
  • [L]标记表示执行完当前规则后停止后续规则处理,进一步防止冲突。

效果验证:

  • 访问example.com/folder/file.php:服务器会307重定向到example.com/folder/file.html,地址栏显示.html后缀
  • 访问example.com/folder/file.html:服务器内部加载folder/file.php返回内容,地址栏保持.html
  • 禁用mod_rewrite时,直接访问.php文件即可正常使用,不受影响

内容的提问来源于stack exchange,提问作者Simx72

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:52:17