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

.htaccess配置需求:移除PHP扩展名规则与指定页面301重定向

.htaccess配置需求:移除PHP扩展名规则与指定页面301重定向

嘿,我来帮你搞定这两个.htaccess的需求!先理清楚核心:一是全站通用移除.php扩展名的规则,二是把原来根目录的旧PHP页面301永久重定向到子文件夹的新路径,确保谷歌索引更新对吧?下面给你一步步拆解配置:

首先,所有规则都要先开启Apache的重写引擎,在.htaccess最顶部加上:

RewriteEngine On

第一步:旧页面到新子文件夹的301重定向

这部分要放在最前面,避免被后续规则干扰。针对你提到的页面,我们写精确匹配的规则,不会影响其他页面:

# 把旧的/about-us.php和/about-us(不管带不带.php)都重定向到新路径/company/about-us
RewriteRule ^about-us(\.php)?$ /company/about-us [R=301,L]

# 把旧的/customer-service.php和/customer-service重定向到新路径/customer-service/contact-customer-service
RewriteRule ^customer-service(\.php)?$ /customer-service/contact-customer-service [R=301,L]

简单解释下:^about-us(\.php)?$ 意思是匹配以about-us开头,后面可选带.php的URL;[R=301]表示永久重定向,告诉搜索引擎更新索引;[L]表示匹配到这条规则就停止往下执行,避免冲突。如果还有其他旧页面要迁移,照着这个格式加就行,比如RewriteRule ^faq(\.php)?$ /support/faq [R=301,L]。

第二步:移除PHP扩展名的301重定向

这一步是为了统一URL格式——如果用户直接访问带.php的新页面(比如/company/about-us.php),自动重定向到不带.php的版本,利于SEO:

# 将所有带.php的URL重定向到不带.php的版本
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

这里用%{THE_REQUEST}是为了获取用户实际发送的请求(比如GET /company/about-us.php HTTP/1.1),确保只处理真实的外部请求,避免内部重写循环。

第三步:内部重写(不带.php访问对应PHP文件)

最后一步是让服务器在用户访问不带.php的URL时,内部自动找到对应的.php文件处理,用户看不到这个过程:

# 当访问的不是目录,且对应的.php文件存在时,内部重写URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]

解释下两个条件:!-d表示请求的不是真实存在的目录;%{REQUEST_FILENAME}.php -f表示对应的.php文件确实存在,这样就不会出现404错误。

注意事项

  • 确保你的Apache服务器已经启用了mod_rewrite模块(大多数主机默认是开启的,如果不确定可以问主机商)
  • 测试的时候可以先把R=301改成R=302(临时重定向),确认所有跳转都正常后再改回301,避免误操作影响搜索引擎索引
  • 所有规则都要放在根目录的.htaccess文件里,子文件夹的.htaccess不需要额外配置

备注:内容来源于stack exchange,提问作者Bernard K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:18:14