如何通过Rewrite移除URL中间位置的.php扩展名?
移除URL中间位置的.php扩展名解决方案
好的,针对你提到的移除URL中间.php扩展名的需求(比如把https://example.com/file.php/a/b/b转为https://example.com/file/a/b/b),我来给你详细说明Apache mod_rewrite的实现方法,同时和你已有的末尾扩展名规则结合起来。
核心规则写法
你需要添加一条专门匹配中间位置.php的Rewrite规则,放在你现有规则的前面,确保优先处理中间的情况:
RewriteEngine On # 处理中间位置的.php(后面跟着子路径) RewriteRule ^(.*)\.php(/.*)$ $1$2 [R=301,L] # 处理末尾的.php(你已有的规则) RewriteRule ^(.*)\.php/?$ $1 [R=301,L]
规则解释
第一条规则
^(.*)\.php(/.*)$:^(.*):捕获.php前面的所有URL路径内容(比如例子中的file)\.php:精确匹配.php字符串(转义.是因为它在正则里是通配符)(/.*):捕获.php后面跟着的所有子路径内容(比如例子中的/a/b/b)- 替换为
$1$2就是把.php去掉,拼接前后两部分内容,实现URL重定向。
第二条是你已经在使用的规则,负责处理
.php在URL末尾的情况(比如file.php转为file)。
注意事项
- 规则顺序:一定要把处理中间.php的规则放在前面,避免末尾规则提前匹配到部分内容导致中间的情况无法被正确处理。
- 测试用临时重定向:建议先把
R=301改成R=302进行测试,确认所有URL都能正确跳转后再改回301(永久重定向),避免浏览器缓存错误的重定向规则。 - 确保mod_rewrite开启:你的Apache服务器需要启用mod_rewrite模块,同时
.htaccess文件要有足够的权限(设置AllowOverride All)。
示例效果
- 输入:
https://example.com/file.php/a/b/b→ 输出:https://example.com/file/a/b/b - 输入:
https://example.com/post.php/category/tech→ 输出:https://example.com/post/category/tech - 输入:
https://example.com/about.php→ 输出:https://example.com/about(由你原有的规则处理)
内容的提问来源于stack exchange,提问作者MagicHat
相关产品推荐
相关产品推荐

