【问题标题】:htaccess if folder exists check folderhtaccess 如果文件夹存在检查文件夹
【发布时间】:2018-02-15 09:56:07
【问题描述】:

我现在正在学习 htaccess 文件,但遇到了一个我似乎无法解决的问题。

此时我正在使用这个 htacces 来制作一个干净的 url:

RewriteEngine on
RewriteRule ^([0-9a-z-A-Z]+)/([0-9a-z-A-Z]+) ?menu=$1&page=$2.php [NC,L]

我有 2 个可能的文件位置:

  1. /menu/page
  2. /menu/Controller/Page

我希望它们都在 URL 中显示:/menu/page

所以我就这么做了。它在网址中显示了我想要的内容。但是因为我在我的菜单中将第二个称为/menu/Controller/Page 我得到了这个错误:

警告:include(Partials/Programmeren/Opdracht1Restwaarde.php):无法打开流:第 20 行没有这样的文件或目录。

这是我的索引页:

<?php
session_start();
if( isset($_GET['page']) ){
    //Heres a problem I know this. I only dont know how to fix it.
    $cPagina = $_GET['menu'] . '/' .$_GET['page'];
} elseif( isset($_SESSION['laatstGebruiktePagina']) ) {
    $cPagina = $_SESSION['laatstGebruiktePagina'];
} else {
    $cPagina = 'indexcontent.php';
}
$_SESSION['laatstGebruiktePagina'] = $cPagina;

include "Partials/head.php";
include "Partials/navbar.php";

//problem include:
include("Partials/$cPagina");
?>

所以在上面的 php 代码中,我有一个地方可以指定文件的位置。但有时应该是:$cPagina = $_GET['menu'] . '/controller/' .$_GET['page'];。起初我以为我可以简单地用 if 语句来做到这一点。但我不能,因为没有什么可以检查的。

补充:我不一定要一些代码来为我解决这个问题。甚至在我可以阅读此内容或其他内容的正确方向上的一点也值得赞赏。我正在阅读 apache 网站上的 htaccess 以及其他一些教程

【问题讨论】:

  • 有点不清楚。浏览器中显示的 URL 是什么?两种情况下应该重写为什么?
  • 如果我不清楚,我会在问题中添加它对不起
  • @anubhava 我猜我已经添加了它,并且问题更加详细。
  • “我有 2 个可能的文件位置” - 为什么,这背后的逻辑是什么?如果两者都存在,应该优先选择哪一个? “起初我以为我可以简单地使用 if 语句来做到这一点。但我不能,因为没有什么可以检查的” - 服务器文件系统中是否存在特定文件是您要检查的,不是吗?那“没什么可检查的”是怎么回事?
  • @CBroe 我确定有一种方法可以“检查”文件夹是否存在。但正如我所说,我刚刚开始学习 htaccess,这就是我问的原因。要找出这些事情是可能的,正如阿努巴瓦在他的回答中所表明的那样,这实际上是可能的,所以现在我可以尝试自己创造这个。它背后的逻辑(我认为这是逻辑)是我的菜单项只是按钮和菜单项,子菜单项位于更深层。

标签: php .htaccess url


【解决方案1】:

您可以将规则更改为:

RewriteEngine On

RewriteRule ^(.+)/([0-9a-z]+)/?$ ?menu=$1&page=$2.php [NC,L]

这将处理这两种情况:

/menu/page
/menu/Controller/Page

并将这些转发到:

?menu=menu&page=page.php
?menu=menu/Controller&page=page.php

分别以便您可以继续使用:

$cPagina = $_GET['menu'] . '/' .$_GET['page'];

在您的代码中。

【讨论】:

  • 嗯,这实际上确实朝着正确的方向前进,只是它引用了错误的文件夹。有 3 个文件夹,controllermodelview,它试图在view 中找到页面,所以它仍然崩溃,但至少它看起来更深一层,所以我猜想它会乱用它
  • 在此之前有 1 条规则,用于最顶层的主页按钮。 RewriteRule ^home ?page=indexcontent.php [NC,L]
  • 好的,我修复了问题内容等再次加载。但是在 url 现在显示 menu/controller/page 有没有办法不再完全破坏它而只显示 menu/page
  • 是的,没错。如果 URL 是 /menu/page,那么 php 代码将无法知道 .php 文件的位置,因为它可以是 /menu/Controller/page.php/menu/someFolder/page.php。最好为不同的文件夹保留不同的 URL。
  • 好的,我将保留当前设置,非常感谢您的帮助,我从中学到了很多:)!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多