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

Laragon下.htaccess URL重写自定义域名可用,localhost路径不可用

问题原因及解决方案

核心问题分析

两种访问场景的路径差异导致了故障:

  • 自定义域名(myproject.test)下,项目处于服务器根目录,请求URI为/login,与路由数组的规则匹配,因此正常工作。
  • localhost/myproject/login下,项目处于服务器子目录,请求URI为/myproject/login,但你的路由数组仅匹配/login;同时.htaccess中的绝对路径/index.php会指向服务器根目录的文件,而非项目目录下的入口文件,双重问题导致路由失效。

修复步骤

1. 修改.htaccess,适配子目录的路径指向

将RewriteRule中的绝对路径改为相对路径,确保子目录下能正确指向项目的index.php:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 用相对路径替代绝对路径,兼容根目录和子目录场景
RewriteRule ^(.*)$ index.php?path=$1 [NC,L,QSA]

2. 修改router.php,统一路由匹配逻辑

通过动态获取项目的基础路径,自动去除URI中的子目录前缀,让路由规则在两种场景下都能生效:

<?php
// 获取项目的基础路径(根目录下为/,子目录下为/myproject/)
$basePath = dirname($_SERVER['SCRIPT_NAME']);
$uri = parse_url($_SERVER['REQUEST_URI'])['path'] ?? '/';

// 去除URI中的子目录前缀,统一为/login这类格式
if ($basePath !== '/') {
    $uri = preg_replace('#^' . preg_quote($basePath, '#') . '#', '', $uri);
    // 处理去除前缀后为空的情况,默认指向首页
    if ($uri === '') {
        $uri = '/';
    }
}

$routes = [
    '/' => 'pages/home.php', // 可选:添加首页路由规则
    '/login' => 'pages/login.php',
];

if (array_key_exists($uri, $routes)) {
    require $routes[$uri];
} else {
    http_response_code(404);
    require "pages/errors/404.php";
    return 0;
}

额外验证项

  • 确认Laragon的Apache已启用mod_rewrite(你已完成此操作,可跳过)
  • 确认Laragon的Apache配置中,项目目录对应的AllowOverride All已生效,确保.htaccess规则能被读取执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:16:07