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

.htaccess无末尾斜杠URL跳转异常:错误跳转到服务器绝对路径

.htaccess异常重定向问题修复方案

问题根因

你遇到的畸形跳转问题由3个配置疏漏共同导致:

  • Apache默认的mod_dir模块行为和重写规则顺序冲突:当请求不带末尾斜杠的路径对应存在的目录时,mod_dir会默认在你的重定向规则执行前自动跳转到带斜杠的路径,此时会把服务器本地文件系统路径拼入跳转URL,就会出现你看到的/var/www/vhosts/example.com/httpdocs/这类路径。
  • HTTPS条件写法不严谨:你写的RewriteCond %{HTTPS}s ^on(s)| 匹配逻辑错误,也没有用到捕获的分组,直接导致跳转URL里出现httpss的多余s字符。
  • 重定向规则缺少必要的标记,且重复开启了两次RewriteEngine On,规则优先级混乱。

修复后的完整配置

<IfModule mod_rewrite.c>
RewriteEngine On

# 强制HTTPS+统一域名前缀,放在所有规则最前面
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} !=on
# 如果不需要www前缀,把下面目标里的www.删掉即可
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

# 非文件路径统一补末尾斜杠,避免mod_dir触发路径拼接
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]*[^/])$ https://%{HTTP_HOST}/$1/ [R=301,L,NE]

# 隐藏.html后缀
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)/?$ $1.html [L]

# 隐藏.php后缀
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]

# 拦截libwww-perl爬虫
RewriteCond %{HTTP_USER_AGENT} libwww-perl.* 
RewriteRule .* ? [F,L]
</IfModule>

注意事项

修改配置后需要清空浏览器缓存再测试,因为301是永久重定向,浏览器会默认缓存旧的跳转结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:48:10