gpt4 book ai didi

apache - .htaccess 子文件夹

转载 作者:行者123 更新时间:2023-12-04 18:41:39 25 4
gpt4 key购买 nike

我有以下结构

-www
\-subfolder

www我有我的主站点 index.php .

在子文件夹中,我有一种管理 UI,在那里我想要另一个 index.php用于管理 UI。

目前我的请求来自 /subfolder/index.php被重定向到 www/index.php并且基本上我的管理 UI 页面不显示。

这是我的 .htaccess文件:
RewriteEngine On
RewriteRule ^$ index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2 [L]

你能帮助我吗?我在其他答案中尝试了几个选项,但由于我不是一个高级的 Web 开发人员,所以我无法工作。

@TerryE,对不起,如果我表现得很粗糙。

我正在使用本地设置进行测试。
我已经安装了 Vertrigo 服务器,它为我提供了 Apache 服务器。在 Windows7 操作系统上运行。服务器安装在 Program files\VertrigoServ\Apache 文件夹中。

我的公用文件夹是 www。在那里我有我的主要站点定义。 .该站点通过 127.0.0.1/index.php 在本地访问或 127.0.0.1/
我有站点本地化,所以 URL 被构造为 /$lang/$page例如 <a href=" / <?php echo $lang; ?> / home "> HOME </a>
index.php主站点我有以下内容:
$page = trim( ( isset( $_GET[ 'page' ] ) ? $_GET[ 'page' ] : 'home' ), '/' );

$lang = trim( ( isset( $_GET[ 'lang' ] ) ? $_GET[ 'lang' ] : 'en' ), '/' );
$langs = array( 'en', 'fr', 'ru' );

根据这些数据,我可以这样打开页面:
include 'html/'. $lang . '/' . $page . '.php';

我所有的主站点页面都位于 www/html/$lang/ $_SERVER['REQUEST_URI'])/en/home主页。
127.0.0.1/en/home作品

所有导航都适用于主站点。

但是,我创建了一个管理 UI,它位于 www/admin 文件夹中 - www 中的下一级。

在那里我没有任何本地化。我只有 EN 作为语言。
所以在 admin 文件夹中 index.php 的顶部我再次
$page = trim( ( isset( $_GET[ 'page' ] ) ? $_GET[ 'page' ] : 'home' ), '/' );

但是,这里的导航如下 <a href=/admin/home"> HOME </a>
在此基础上,我可以在 admin 文件夹中的 index.php 中构建页面,如下所示:
include 'html/ . $page . '.php';

页面位于 www/admin/html
这根本行不通。每当我在管理 UI 中按下主页链接时,我都会被重定向到我的主站点(不存在的页面)。如果我添加 RewriteRule ^subfolder/ - [L]在 .htaccess 中,我得到 HTTP 404 NOT Found error .
127.0.0.1/admin/home不工作。管理员内部的任何其他导航也没有。感谢您愿意和耐心地帮助我!

最佳答案

我由此假设您只有一个 .htaccess 文件在您的 www 目录。

想想什么规律

RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2 [L]

在来自 的 Perdir 上下文中解释时执行www : 采用任何形式的 URI someDir/somePage并将其替换为 index.php?lang=someDir&page=somePage ,所以这将拦截并重写任何 /subfolder/index.php .

这没有很好的记录,但 Perdir 处理将优先使用最低的 .htaccess 文件设置 RewriteEngine On在请求路径上。因此,如果您添加特定于管理员的 .htaccess “子文件夹”子文件夹中的文件,这将抢占 www 一并规避这个问题。

后记评论

当真正的问题是“如果我的网站由共享服务托管,我如何调试我的 .htaccess 规则?”时,Veni 和其他海报会进入问答环节。我添加共享服务资格的原因是,如果您对 LAMP 配置具有 root 访问权限,那么您可以打开重写日志记录,并且调试级别为 4-6 的日志文件将为您提供足够的取证来确定发生了什么.

然而,大多数爱好/小型服务用户在共享的基础上购买他们的服务,在这里他们没有 root 访问权限,并且托管服务提供商出于性能原因禁用此类日志记录,因此他们有一个二进制反馈——规则有效,或者他们别。我使用共享服务,我的方法(描述为 here )是设置一个虚拟机,该虚拟机将此配置作为测试和集成环境进行镜像——在此我有这样的 root 访问权限。但是,对于大多数用户来说,这可能太复杂了。这确实是一个更广泛的话题,值得自己进行 Q/讨论。

关于具体点:
  • 如果您的结构是 /(lang|admin)/page ,那你为什么有这个规则,因为它会导致 perdir 重试的严重破坏。
    RewriteRule ^$ index.php [QSA,L]
  • 更好的类似以下内容以强制重定向到默认语言(假设本示例中的 lang 列表是 EN 和 IT:
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteCond $1 !^/(en|it|admin)/
    RewriteRule ^(.*) http://yourdomain/en/$1 [R=301,L]
  • 你知道重定向重启/循环问题吗? (搜索 REDIRECT_STATUS)

  • 我是 Stackoverflow 的新手,但不是要整理出这种 s**t。我的博客上有几篇关于此的详细文章。

    后记评论——还有更多

    确定一些一般帮助。
  • 不要我们固定 IP 在您的 windows\system32\drivers\etc\hosts
  • 中放置 127.0.0.1 的别名
  • 您可以在您的 VertrigoServ Apache 配置中打开重写日志记录,这可以让您详细审核您遇到问题的地方
  • 如果您有一个小的诊断 stub 来帮助您了解正在发生的事情,这也很有帮助,这就是我为 test 目录中的 index.php 提出的内容:
    <?php header( "Content-type: text.plain" ); echo "main: "; var_export($_GET);

  • 但是对于以下每种情况,您确实需要:
    - 处理存在的 URI(并停止重写循环)
    -/和/admin/的默认值
    - 行政/*
    - */*
    - *(和语言默认值)

    这就是我想出的。我一直保持简单。我们可以使用复杂的正则表达式来折叠其中的一些,但为什么要这么麻烦。如果需要,您可能需要添加更多 QSA。
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule . - [L]

    RewriteRule ^$ index.php [QSA,L]
    RewriteRule ^admin/?$ admin/index.php [QSA,L]

    RewriteRule ^admin/(.*)$ admin/index.php?page=$1 [L]

    RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2 [L]

    RewriteRule ^(.*)$ index.php?lang=en&page=$1 [L]

    关于apache - .htaccess 子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805464/

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