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

htaccess移除WWW或HTTPS时跳转异常显示index.php路径问题

问题原因

你的问题完全是规则顺序错误导致的:

  • 你把强制HTTPS、WWW、末尾斜杠这类外部跳转规则放在了所有内部重写规则的后面。用户的访问请求会先被前面的重写规则把路径重写成/index.php?module=xxx的格式,等到触发跳转时,拿到的已经是重写后的路径,自然不会保留原本的/home/后缀。
  • 大量使用[N]标志会让重写流程反复从头执行,进一步放大了路径被篡改的问题。

修复方案

直接调整规则顺序,把所有外部跳转逻辑移到所有内部重写规则的最前面,跳转执行完成之后再跑内部重写的逻辑即可。调整后的完整规则如下:

# 所有外部跳转规则放在最前面
Redirect 301 /podcast_rss_ogg.php /podcast_rss.php?format=ogg

# 强制WWW前缀
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

# 强制HTTPS
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 强制末尾斜杠
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]

# 以下为内部重写规则
RewriteRule ^image_prox/([%\w\.-_]*)$ /includes/image_proxy.php?url=$1 [N,NC]

RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

RewriteRule ^mailinglist/$ /index.php?module=mailing_list [N]
RewriteRule ^articles/$ /index.php?module=home [N]
RewriteRule ^all-articles/$ /index.php?module=home&displayall [N,QSA]
RewriteRule ^all-articles/page\=([0-9]+)/$ /index.php?module=home&page=$1&displayall [N]
RewriteRule ^admin/$ /index.php?module=home [L]
RewriteRule ^latest-comments/$ /index.php?module=comments_latest [N]
RewriteRule ^latest-comments/page=([0-9]+)/$ /index.php?module=comments_latest&page=$1 [N,NC,QSA]
RewriteRule ^home/banned/$ /index.php?module=home&message=banned [N]
RewriteRule ^irc/$ /index.php?module=irc [N]
RewriteRule ^register/$ /index.php?module=register [N]
RewriteRule ^about-us/$ /index.php?module=about_us [N]
RewriteRule ^private-messages/$ /index.php?module=messages [N]
RewriteRule ^submit-article/$ /index.php?module=submit_article&view=Submit [N]
RewriteRule ^submit-article/error\=(.+?)?$ /index.php?module=submit_article&view=Submit&error=$1 [N,NC,QSA]
RewriteRule ^contact-us/$ /index.php?module=contact [N]
RewriteRule ^email-us/$ /index.php?module=email_us [N]
RewriteRule ^support-us/$ /index.php?module=support_us [N]
RewriteRule ^articles/$ /index.php?module=home [N]
RewriteRule ^articles/(.+?)\.([0-9]+)/$ /index.php?module=articles_full&title=$1&aid=$2 [N,NC,QSA]
RewriteRule ^articles/([0-9]+)/$ /index.php?module=articles_full&aid=$1 [N,NC,QSA]
RewriteRule ^articles/(.+?)\.([0-9]+)/error=(.+?)/?$ /index.php?module=articles_full&aid=$2&title=$1&error=$3 [N,NC,QSA]
RewriteRule ^articles/(.+?)\.([0-9]+)/page\=([0-9]+)/?$ /index.php?module=articles_full&aid=$2&title=$1&page=$3 [N,NC,QSA]
RewriteRule ^articles/(.+?)\.([0-9]+)/comment_id\=([0-9]+)/?$ /index.php?module=articles_full&aid=$2&title=$1&comment_id=$3 [N,NC,QSA]
RewriteRule ^articles/(.+?)\.([0-9]+)/article_page\=([0-9]+)/?$ /index.php?module=articles_full&aid=$2&title=$1&article_page=$3 [N,NC,QSA]
RewriteRule ^home/page\=([0-9]+)/$ /index.php?module=home&page=$1 [N]
RewriteRule ^private-messages/page\=([0-9]+)/$ /index.php?module=messages&page=$1 [N,NC,QSA]
RewriteRule ^private-messages/compose/(\d+)*/$ /index.php?module=messages&view=compose [N]
RewriteRule ^private-messages/compose/user\=([0-9]+)/$ /index.php?module=messages&view=compose&user=$1 [N,NC,QSA]
RewriteRule ^private-messages/([0-9]+)/$ /index.php?module=messages&view=message&id=$1 [N,NC,QSA]
RewriteRule ^private-messages/([0-9]+)/page\=([0-9]+)/$ /index.php?module=messages&view=message&id=$1&page=$2 [N,NC,QSA]
RewriteRule ^profiles/([0-9]+)/$ /index.php?module=profile&user_id=$1 [N,NC,QSA]
RewriteRule ^profiles/([0-9]+)/comments/$ /index.php?module=profile&view=more-comments&user_id=$1 [N,NC,QSA]
RewriteRule ^profiles/([0-9]+)/comments/page\=([0-9]+)$ /index.php?module=profile&view=more-comments&user_id=$1&page=$2 [N,NC,QSA]
RewriteRule ^users/statistics/$ /index.php?module=statistics [N,NC,QSA]
RewriteRule ^users/statistics/statid=([0-9]+)/$ /index.php?module=statistics&statid=$1&act=pick [N,NC,QSA]
RewriteRule ^articles/category/(.+?)/page\=([0-9]+)/$ /index.php?module=articles&view=cat&catid=$1&page=$2 [N,NC,QSA,B]
RewriteRule ^articles/category/(.+?)/$ /index.php?module=articles&view=cat&catid=$1 [N,NC,QSA,B]
RewriteRule ^itemdb/([0-9]+)/$ /index.php?module=items_database&view=item&id=$1 [N,NC,QSA]
RewriteRule ^itemdb/developer/([0-9]+)/$ /index.php?module=items_database&view=developer&id=$1 [N,NC,QSA]
RewriteRule ^itemdb/anticheats/([0-9]+)/$ /index.php?module=items_database&view=anticheats&id=$1 [N,NC,QSA]
RewriteRule ^steam-tracker/$ /index.php?module=steam_linux_share [N,NC,QSA]
RewriteRule ^steamplay/$ steamplay.php [N,NC,QSA]
RewriteRule ^steamplay/reports/([0-9]+)/$ steamplay_reports.php?id=$1 [N,NC,QSA]
RewriteRule ^steamplay/reports/([0-9]+)/page=([0-9]+)/$ steamplay_reports.php?id=$1&page=$2 [N,NC,QSA]
RewriteRule ^db/$ itemdb.php [N,NC,QSA]
RewriteRule ^free-games/$ free_games.php [N]
RewriteRule ^itemdb/steamid/([0-9]+)/$ itemdb.php?steamid=$1 [N,NC,QSA]
RewriteRule ^sales/page=([0-9]+)/$ /sales.php?page=$1 [N,NC,QSA]
RewriteRule ^sales/([0-9]+)/$ /sales.php?sale_id=$1 [N,NC,QSA]
RewriteRule ^sales/message=(.+?)/?$ /sales.php?message=$1 [N,NC,QSA]
RewriteRule ^sales/$ sales.php [N]

# 路径不存在时转发给index.php
RewriteRule ^$ index.php?/ [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?/$1 [QSA,L]

修改后记得清空浏览器缓存再测试,301跳转是永久缓存,旧的错误跳转结果会存在本地导致测试不准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:06:05