【问题标题】:Htaccess and PHP Direction or routingHtaccess 和 PHP 方向或路由
【发布时间】:2021-09-15 22:38:47
【问题描述】:

我要达到的网址:https://example.com/VdnbzeHfua/ep1_mp4

注意:我的页面 (index.php) 位于根文件夹中

当我访问这个 URL https://example.com/VdnbzeHfua/ep1_mp4 时,它不应该期待子文件夹

我会像这样通过 PHP(根文件夹中的index.php)获取并使用 URL 中的值

<?php

$url      = $_SERVER['REQUEST_URI'];
................
........... 
?>

如何用php和.htaccess实现这个?

请任何人帮我解决这个问题。

【问题讨论】:

    标签: php .htaccess url-routing


    【解决方案1】:

    您需要一个标准的前端控制器模式,这可以通过.htaccess 中的单个指令来实现:

    FallbackResource /index.php
    

    任何会触发 404 的请求都会被传递给 /index.php

    另一种方法(可能更常见)是使用 mod_rewrite 代替。例如:

    RewriteEngine On
    
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]
    

    尽管仅此一项并没有比上面的 FallbackResource 指令做更多的事情。

    这两种方法都需要正确设置DirectoryIndex(如果尚未正确设置)(这通常会在服务器配置中设置为index.php)。例如,在 .htaccess 的顶部,现有指令之前:

    DirectoryIndex /index.php
    

    您似乎已经解决了 PHP 部分。 IE。检查 $_SERVER['REQUEST_URI'] 的值以检查请求的 URL,顺便提一下,该 URL 还将包含查询字符串。

    然后您可以根据需要包含必要的 PHP 文件。例如,这可能很简单,例如:

    if ($url == '/about') {
        include('content/about.php');
    }
    

    但是可以根据您的喜好制作复杂的。显然,if 构造不会扩展到数千页。

    【讨论】:

    • @AndroidCse 你什么意思?是的……你已经有$url = $_SERVER['REQUEST_URI'];。然后你解析$url 并决定你想要做什么,例如。 if ($url == '/about') include('content/about.php'); 显然你可以让这部分复杂到你喜欢的程度。
    • 完美运行。谢谢你。我只是将这个 FallbackResource /index.php 添加到我的 .htaccess 文件中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2014-12-08
    • 2014-05-09
    相关资源
    最近更新 更多