URL含后缀时.htaccess重定向规则失效问题求助
修复.htaccess规则的方案
问题根源
你当前的规则里,RewriteRule ^/?$ ...仅匹配根路径(空路径或仅/),一旦URL里.net后面带了其他内容(比如/59forum或具体帖子路径),这条规则就不会触发,导致跳转失效。
修正后的完整规则
RewriteEngine On # 1. 强制HTTPS + 去除www前缀(合并操作,减少跳转次数) RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L] # 2. 将59sportfury.net的所有请求映射到59plymouth.net/59forum,保留原路径 # 根路径直接跳转至/59forum RewriteCond %{HTTP_HOST} ^59sportfury\.net$ RewriteRule ^$ https://59plymouth.net/59forum/ [R=301,L] # 非根路径:如果原路径没带/59forum则追加,已带则直接跳转 RewriteCond %{HTTP_HOST} ^59sportfury\.net$ RewriteRule ^(?!59forum/)(.*)$ https://59plymouth.net/59forum/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^59sportfury\.net$ RewriteRule ^59forum/(.*)$ https://59plymouth.net/59forum/$1 [R=301,L] # 3. 处理59plymouth.net的请求,确保所有路径指向论坛目录 # 根路径跳转至/59forum RewriteCond %{HTTP_HOST} ^59plymouth\.net$ RewriteRule ^$ /59forum/ [R=301,L] # 非根路径:如果没带/59forum则自动追加前缀 RewriteCond %{HTTP_HOST} ^59plymouth\.net$ RewriteCond %{REQUEST_URI} !^/59forum/ RewriteRule ^(.*)$ /59forum/$1 [R=301,L]
规则说明
- HTTPS+去www:把两个需求合并成一条规则,避免多次跳转,不管是HTTP还是带www的请求,都会直接跳转到不带www的HTTPS地址。
- 域名映射:针对
59sportfury.net的所有请求(含子路径),都会正确跳转到59plymouth.net/59forum下的对应内容,不会重复添加/59forum前缀。 - 论坛路径强制:确保
59plymouth.net的所有请求最终都指向/59forum目录,不管用户输入的是根路径还是其他子路径。
迁移到httpd.conf的注意事项
- 规则建议放在对应域名的
<VirtualHost>块内,确保只针对目标域名生效。 - 无需添加
RewriteBase(httpd.conf中基于服务器根目录的绝对路径匹配)。 - 路径匹配模式需调整为绝对路径格式,比如原
.htaccess里的^$对应^/$。 - 确保虚拟主机配置中开启了
RewriteEngine On,无需依赖.htaccess的AllowOverride设置。
内容的提问来源于stack exchange,提问作者shortmort37
相关产品推荐
相关产品推荐

