如何通过.htaccess实现WWW转非WWW并隐藏PHP后缀(含子目录)
解决WWW转非WWW+隐藏PHP后缀的异常问题
这个问题核心是规则执行顺序搞反了!你现在是先给URL加上.php后缀,再做WWW转非WWW的重定向,这就导致路径被错误拼接出domain.com/domain.com/page.php这种奇怪结果。咱们调整规则顺序,先处理域名跳转,再处理后缀隐藏,就能完美解决所有异常场景。
修正后的.htaccess代码
DirectoryIndex /index.php RewriteEngine On # 第一步:优先处理WWW转非WWW的301重定向 RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] # 若还未启用HTTPS,替换成http://%1/$1 # 第二步:隐藏PHP后缀——访问不带.php的路径时,实际加载对应.php文件 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php [L] # 可选优化:若用户直接访问带.php的URL,自动重定向到无后缀版本(提升SEO) RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.php[\s?] [NC] RewriteRule ^ /%1 [R=301,L]
规则说明
WWW转非WWW放在最前面:所有WWW开头的请求会先被重定向到对应的非WWW路径,比如:
www.domain.com/page→domain.com/pagewww.domain.com/subfolder/page→domain.com/subfolder/page
这一步确保路径还没被修改,不会出现错误拼接。
隐藏PHP后缀的逻辑:完成域名跳转后,再处理后缀隐藏,此时请求已经是非WWW的,逻辑和你原来正常访问
domain.com/page的情况完全一致,不会出问题。可选的带.php重定向:如果用户直接访问
www.domain.com/page.php,会先跳转到domain.com/page.php,再自动重定向到domain.com/page,彻底隐藏后缀,同时避免重复内容影响SEO。
验证所有场景
- ✅
www.domain.com→domain.com(保持原有正常跳转) - ✅
www.domain.com/page→domain.com/page(正确跳转) - ✅
www.domain.com/subfolder/page→domain.com/subfolder/page(完美适配子目录) - ✅
www.domain.com/page.php→domain.com/page(先转域名再去后缀) - ✅
domain.com/page→ 正常加载page.php(保留原有功能)
内容的提问来源于stack exchange,提问作者kids
相关产品推荐
相关产品推荐

