求助:.htaccess移除URL斜杠导致跳转异常问题
解决.htaccess导致外部链接斜杠被移除的问题
嘿,碰到斜杠被莫名吃掉的问题确实头疼!我帮你分析下大概率的原因和解决办法:
问题重现
你提到外部点击链接时,www.mysite.com/home会被重定向到www.mysite.comhome——这明显是URL拼接时丢失了域名和路径之间的斜杠,大概率是你的重写规则里的目标路径没有正确以斜杠开头。
你提供的.htaccess片段
# Turn mod_rewrite on Allow from all RewriteEngine On Options +FollowSymLinks -MultiViews ErrorDocument 404 /errors/404.php DirectoryIndex home.php # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{THE_REQUES...
问题根源
从你给出的片段来看,大概率是后面的RewriteRule在构造目标URL时,没有在路径开头加上斜杠。比如如果规则写成了RewriteRule ^ %1 [R=301,L]而不是RewriteRule ^ %1/ [R=301,L],就会导致路径直接拼在域名后面,丢掉中间的斜杠。
修复后的完整.htaccess配置
我帮你补全并修正了规则,确保斜杠不会丢失:
# Turn mod_rewrite on Allow from all RewriteEngine On Options +FollowSymLinks -MultiViews ErrorDocument 404 /errors/404.php DirectoryIndex home.php # 根目录下设置RewriteBase,避免路径解析错误(根目录可省略,但加上更稳妥) RewriteBase / # 外部重定向:把/dir/foo.php跳转到/dir/foo(带斜杠结尾) RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1/ [R=301,L] # 内部重写:把/dir/foo或/dir/foo/映射到/dir/foo.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)/?$ $1.php [L]
关键说明
- 注意
RewriteRule ^ %1/ [R=301,L]里的%1/,末尾的斜杠确保路径是从根目录开始的,不会和域名直接拼接。 - 内部重写规则同时支持带斜杠和不带斜杠的请求,避免用户手动输入时出现问题。
- 如果之前有301跳转的缓存,记得清除浏览器缓存或者用无痕模式测试新规则。
内容的提问来源于stack exchange,提问作者JasperDaDolphin
相关产品推荐
相关产品推荐

