除了以文件扩展名即 .pdf、.html、...结尾的 URL 之外,有没有办法自动向所有 URL 添加尾部斜杠?

如何解决除了以文件扩展名即 .pdf、.html、...结尾的 URL 之外,有没有办法自动向所有 URL 添加尾部斜杠?

这是我的 .htaccess 文件

RewriteEngine On

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.PHP?$1 [L,QSA]

这是我的 index.PHP 文件

<?PHP

$GLOBALS["DEBUG"] = true;

$GLOBALS["DEBUG_MODE"] = "file";
// $GLOBALS["DEBUG_MODE"] = "stdout";
// $GLOBALS["DEBUG_MODE"] = "global";

$GLOBALS["DEBUG_REGEX"] = "^[^b]";
$GLOBALS["ERROR_LOG"]   = true;
// $GLOBALS["DEBUG_sql"] = true;
// $GLOBALS["PROFILER_sql"] = true;

// $GLOBALS["DEBUG_CLASS_WALK"]  = true;
// $GLOBALS["DEBUG_CLASS_FOUND"] = true;
// $GLOBALS["DEBUG_CLASS_MATCH"] = "c_";

define("DIR_WEbroOT",realpath(dirname(__FILE__)));

include DIR_WEbroOT . "/xfw/app/startup.PHP";

d();





// pr(db0()->oQueryFetchArray("SELECT * FROM core_contact"));


pr(r::parseUrl());



if ($a = x_Route::path("^/JSON/(JSON|RAW|DIRECT)/([^/]*)/([^/]*)")) {
    $class  = $a[2];
    $method = $a[3];
    
    $a_params = json_decode(trim(file_get_contents("PHP://input")),true);
    // $a_params = array_map('sql_escape_string',$a_params);

    try {
        $data = [
            "message" => "ok","data"    => call_user_func_array("$class::$method",[$a_params]),];
    } catch (Exception $e) {
        $data = [
            "message" => "Erreur","data"    => $e->getMessage() . "\n\n" . getExceptionTraceAsstring($e),];

        h("err");

        pr(getExceptionTraceAsstring($e));
        h("$class::$method");
        pr($a_params);
    }
    
    if ($a[1] == "JSON") {
        echo json_encode($data);
    } elseif ($a[1] == "DIRECT") {
        echo json_encode($data["data"]);
    } else {
        echo $data;
    }

    exit;
}


if ($a = r::path("^/$")) {
    header("Location: /fr/ ");

    exit;
}


if (!r::path("/$")) {
    header("Location: ".ROUTE_PATH."/");

    exit;
}


if ($a = r::path("^/fr/$")) {
    echo View::renderTemplatePublic("public/fr/home.html");

    exit;
}


if ($a = r::path("^/fr/contact/$")) {
    echo View::renderTemplatePublic("public/fr/contact.html",[
        "message" => c_Page::message()
    ]);

    exit;
}


if ($a = r::path("^/fr/(.*)/")) {
    echo View::renderTemplatePublic("public/fr/$a[1].html");

    exit;
}

我想要一个规则,可以为所有 URL 添加一个尾部斜杠,但带有扩展名(.pdf、.html、...)的 URL 除外。任何人都可以帮助我实现这一点,以便当我有一个像 mywebsite.com/example.pdf 这样的 URL 时,它不会将我重定向到 mywebsite.com/example.pdf/ 并在末尾添加斜杠?

解决方法

看起来像

if (!r::path("/$")) {
    header("Location: ".ROUTE_PATH."/");

    exit;
}

是这里需要修改的部分。这似乎是在使用正则表达式; /$ 只检查值是否以斜杠结尾,条件是否定的,如果不是则重定向。

与其尝试提​​出更复杂的正则表达式,不如在这里使用 pathinfo。尝试用

替换该部分
if (!r::path("/$") && pathinfo(ROUTE_PATH,PATHINFO_EXTENSION) === '') {
  header("Location: ".ROUTE_PATH."/");

  exit;
}

PATHINFO_EXTENSION 标志使 pathinfo 只返回扩展名,如果路径实际上没有任何扩展名,它将只返回一个空字符串。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?