Hostinger主机下.htaccess的RewriteRule无法去除PHP后缀求助
解决Hostinger主机下URL隐藏.php后缀且页面链接不跳转回.php的问题
问题核心
需要实现:
- 访问
website/leistungen时,实际加载leistungen.php,地址栏保持无.php后缀 - 访问
website/leistungen.php时,自动301重定向到website/leistungen - 页面内的链接点击后,地址栏不会出现.php后缀
正确的.htaccess规则
将以下代码放在网站根目录(如public_html)的.htaccess文件中:
RewriteEngine On # 1. 重定向带.php的URL到无后缀版本(仅针对实际存在的.php文件) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)\.php$ /$1 [L,R=301] # 2. 内部映射无后缀请求到对应的.php文件(仅针对不存在的文件/目录) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/.]+)$ $1.php [NC,L]
规则说明
- 重定向规则优先执行:确保所有带.php的请求(无论直接访问还是旧链接)都被永久重定向到无后缀版本,避免重复内容,同时修正地址栏显示。
- 内部映射规则:当用户访问无后缀路径时,服务器内部加载对应的.php文件,浏览器地址栏不会变化。
- 条件
!-d和!-f用于排除实际存在的文件和目录,避免干扰静态资源(如图片、CSS)和真实目录的访问。
页面链接修正
必须确保页面内所有<a>标签使用无后缀路径,示例:
- 同目录下的链接:
<a href="leistungen">Leistungen</a> - 网站根目录下的链接:
<a href="/leistungen">Leistungen</a>
如果链接仍写为leistungen.php,即使有重定向规则,点击时也会先跳转到.php地址再被重定向,导致地址栏短暂显示后缀,必须统一改为无后缀路径。
Hostinger主机额外注意事项
- 确认
.htaccess文件放置在网站根目录(通常是public_html文件夹),而非子目录。 - Hostinger默认开启
mod_rewrite模块,若不确定可通过phpinfo()页面确认。 - 清除浏览器缓存:301重定向会被浏览器缓存,之前的错误跳转记录可能残留,需手动清除缓存后测试。
内容的提问来源于stack exchange,提问作者M. Carle
相关产品推荐
相关产品推荐

