如何在htaccess中重定向而不阻塞php api?

问题描述 投票:0回答:1

我有一个位于根目录中的index.php 文件。这会输出 HTML 或 JSON,具体取决于 URL:

<?php
    require_once('./../private/Router.php');
    new Router();
?>

<html lang=“en”>
...

路由器看起来像这样:

<?php

require_once('Api.php');

class Router
{
    public function __construct()
    {
        $uri = $_SERVER['REQUEST_URI'];
        $method = $_SERVER['REQUEST_METHOD'];

        if (preg_match('/^\/api\//', $uri)) {
            $endpoint = str_replace('/api/', '', $uri);
            $api = new Api();
            $data = null;

            switch ($endpoint) {
                case 'players':
                    $data = $api->getPlayers();
                    break;
            }

            if ($data != null) {
                $api->sendResponse($data);
            } else {
                $api->sendResponse(['error' => 'Endpoint not found'], 404);
            }
            
            exit;
        }
    }
}

我的 htaccess 在所有情况下都成功重定向,但输入 /asdasd/asdas 时除外。我的根页面的内容显示,但它抛出一个错误“我该如何解决这个问题?

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ / [QSA,L]
</IfModule>

测试案例:

<domain>
<domain>/api/players
<domain>/api/players2
<domain>/asd (Possible to remove "asd" after redirect?)
<domain>/asd.php (Possible to remove "asd.php" after redirect?)
<domain>/asd/asd (PROBLEM!)
php apache .htaccess url ddev
1个回答
0
投票

有趣的是,只有带斜杠的路径才会出现问题。在 .htaccess 中,定义了所有请求都被重定向,这实际上是有效的,但在 index.php 中,Javascript、CSS 等文件的路径定义如下:

./scripts/main.js
./styles/main.css

这种行为很有趣,因为一切都适用于由 .htaccess 转发或直接找到的所有调用,但不适用于其他情况。要解决这个问题,只能删除实现开头的点。

/scripts/main.js
/styles/main.css

根据 URL 中的 slash,假定请求位于 不同的目录 中,这就是文件抛出错误并且语法假定不正确的原因。

© www.soinside.com 2019 - 2024. All rights reserved.