gpt4 book ai didi

php - htaccess 反向目录

转载 作者:行者123 更新时间:2023-12-04 05:47:32 25 4
gpt4 key购买 nike

是否可以让 htaccess 查找与 url 相关的特定文件,如果未找到则返回一步?

例子:

/示例/这里/哪里/从

Htaccess 查看 '/example/here/where/from' 是否确实是某种类型的文件 (/example/here/where/from.php) 如果失败,它会返回一步并检查是否 ' '/example/here/where' 是一个文件(/example/here/where.php)等等。

如果它必须回到树中,假设它们作为参数,如下所示:

/示例/这里.php

$_GET['params'] = '哪里/来自';

提前致谢

编辑:

拼写

最佳答案

这是非常棘手的,但这是一个递归遍历给定 REQUEST_URI 的父目录的代码,它支持无限深度。

通过 httpd.conf 启用 mod_rewrite 和 .htaccess然后将此代码放入您的 .htaccessDOCUMENT_ROOT目录:

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
# don't do anything
RewriteRule ^ - [L]

# if current ${REQUEST_URI}.php is not a file then
# forward to the parent directory of current REQUEST_URI
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f
RewriteRule ^(.*?)/([^/]+)/?$ $1/ [L]

# if current ${REQUEST_URI}.php is a valid file then
# load it be removing optional trailing slash
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

解释:

假设原始 URI 是: /index/foo/bar/baz .也让我们说 %{DOCUMENT_ROOT}/index.php存在但在 DOCUMENT_ROOT 下不存在其他 php 文件.

RewriteRule #1 有一个正则表达式,它将当前的 REQUEST_URI 分成两部分:
  • 除最低子目录外,所有子目录都进入 $1这将是 index/foo/bar这里
  • 进入 $2 的最低子目录这将是 baz这里

  • RewriteCond 检查是否 %{DOCUMENT_ROOT}/$1/$2.php (这意味着是否 %{DOCUMENT_ROOT}/index/foo/bar/baz.php )是 不是 一个有效的文件。

    如果条件成功,则内部重定向到 $1/这是 index/foo/bar/这里。

    再次重复 RewriteRule #1 的逻辑,使 REQUEST_URI 为(每次递归后):
  • index/foo/bar/
  • index/foo/
  • index/

  • 此时,规则 #1 的 RewriteCond 失败,因为 ${DOCUMENT_ROOT}/index.php存在于那里。

    我的 RewriteRule #2 说转发到 $1.php如果 %{DOCUMENT_ROOT}/$1.php是一个有效的文件。请注意,RewriteRule #2 的正则表达式匹配除最后一个斜杠之外的所有内容并将其放入 $1 .这意味着检查是否 %{DOCUMENT_ROOT}/index.php是一个有效的文件(确实如此)。

    此时 mod_rewrite 处理完成,因为在此之后两个 RewriteCond 都失败了,因此无法触发进一步的规则,因此 %{DOCUMENT_ROOT}/index.php由您的 Apache Web 服务器提供适当的服务。

    关于php - htaccess 反向目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10487909/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com