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

将PHP网站升级为HTTPS后出现404错误,求排查解决

问题排查与解决方案

核心问题分析

访问根目录重定向到/en后触发404,本质是.htaccess的URL重写规则未正确匹配/en路径,导致服务器将其当作真实文件/目录查找,最终触发自定义404页面。直接访问index.php?lang=en正常,说明PHP运行正常,问题集中在重写规则和域名配置上。

具体排查与修复步骤

1. 添加RewriteBase并优化规则优先级

在.htaccess的RewriteEngine On后添加RewriteBase /,确保重写路径以网站根目录为基准。同时将强制HTTPS/统一域名的规则放在最前面,避免路由规则被拦截:

Options All -Indexes
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# 强制跳转至HTTPS + 统一www域名
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.mywebsite.com%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$ [NC]
RewriteRule ^ https://www.mywebsite.com%{REQUEST_URI} [L,R=301]

2. 修正重写规则的匹配条件

原规则仅排除了真实文件,未排除真实目录。如果服务器上存在en目录,会优先访问目录而非触发重写。给所有路由规则统一添加排除文件和目录的条件:

# 排除真实文件/目录,仅对不存在的路径执行重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 路由规则,添加[L]终止后续规则,[QSA]保留原有参数
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?lang=$1 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?lang=$1&menu=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9ÑñÇçÜüÁáÉéÍíÓóÚú=_-]+)/?$ index.php?lang=$1&menu=$2&page=$3 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9ÑñÇçÜüÁáÉéÍíÓóÚú=_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?lang=$1&menu=$2&page=$3&key=$4 [L,QSA]

ErrorDocument 404 /pages/404-page-htaccess.php

3. 优化PHP重定向代码

使用header()重定向更规范,且必须在输出任何内容前调用,重定向后需终止脚本执行:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>My title</title>
        <meta name="description" content="My description."/>
        <meta name="google-site-verification" content="XXXXX"/>
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
        <meta name="keywords" content="keyword1, keyword2, keyword3">
    </head>
    <body>
        <?php
            if (isset($_GET['lang']) && $_GET['lang'] !== '') {
                echo "GET: " . $_GET['lang']; // 输出实际lang值方便测试
            } else {
                header("Location: https://www.mywebsite.com/en", true, 302);
                exit(); // 重定向后必须终止脚本
            }
        ?>
    </body>
</html>

4. 检查服务器配置

确保Apache虚拟主机配置中开启了AllowOverride All,否则.htaccess的重写规则无法生效:

<Directory /path/to/your/website>
    AllowOverride All
    Require all granted
</Directory>

测试验证

完成上述修改后,访问https://mywebsite.com会自动重定向到https://www.mywebsite.com/en,此时页面应显示GET: en,而非404内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:42:51