【问题标题】:PHP subfolder used as home directory用作主目录的 PHP 子文件夹
【发布时间】:2021-12-11 16:52:32
【问题描述】:

我正在用 php、html、css 和一些 javascript 编写一个网站。 我在本地主机上,更确切地说是 LAMP 服务器,我要访问这个“网站”,浏览器上的 url 是http://localhost/website

我想要的是有一个包含index.php 的子文件夹。所以我在包含subfolder/index.php 的主文件夹上创建了一个index.php,一切都很好。

现在我想在子文件夹 (subfolder/about.php) 上创建一个关于页面。但是 url 应该是 localhost/website/about.php 这不起作用。

我怎样才能有一个子文件夹,就像它是要显示的主文件夹一样?

试图简化问题:

website/
    subfolder/
        index.php
        about.php
        products.php
        etc.php
    index.php

想象上面是files目录,大概可以理解。

所以链接应该是 website/about.php 而不是 website/subfolder/about.php 基本上我需要的是子文件夹就像网站的根文件夹一样。

【问题讨论】:

  • 您收到了回复。也许错误等?什么方法不起作用?
  • website/about.php >>> <?php include 'website/subfolder/about.php';?听起来您确实想要一个简单的前端控制器(例如,website/index.php 充当请求上下文的定位器,例如 website/index.php?page=about)。
  • 我希望子文件夹像主域一样。任何网站/anypage.php 都应该这样工作,而不是 webset/subfolder/anypage.php
  • 与其重复你的努力,或者编写一个前端控制器,或者使用其他重写技巧:我个人发现重新定义你的文档根目录更容易。如果您在 *nix 机器上,您可以尝试符号链接。您可以在此处链接,而不是文档根目录的文件夹。或子文件夹等。我倾向于使用/var/www -> /path/to/project/www 进行简单的开发环境切换。

标签: php


【解决方案1】:

简单的前控制器:

网站/index.php

<?php

switch ($_GET['page'] ?: 'index')
{
    case 'about':
        require 'website/subfolder/about.php';
    break;
    case 'products':
        require 'website/subfolder/products.php';
    break;
    default: // index
        require 'website/subfolder/index.php';
}

然后使用.htaccess 文件设置前端控制器重写:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /website/index.php?page=$1 [QSA,L]

https://stackoverflow.com/a/26755631/451969

现在像这样的 url 应该以 page GET 变量的形式间接指向您的 website/index.php 前端控制器:

website             # index
website/about       # about page
website/products    # products listing

【讨论】:

  • 我使用的是 LAMP 服务器。这个 .htaccess 是否应该在 website/ 目录中
  • @tiagocalado 我想是的;你可能需要稍微调整一下。例如,如果 /website 部分位于网站文件夹中,您可能需要删除它。我不经常惹RewriteRule...
  • 这似乎是一个很好的解决方案,将任何 url 重定向到 index.php 并从那里进行分发,我可以使用它。但是在我的本地主机中似乎没有应用 .htaccess,也许这是在我的系统中,我正在使用 LAMP 配置?
  • @tiagocalado 另外,我建议将这些 PHP 文件放在 web 路径之外,这样就不能直接使用 http 访问它们。在网络根目录下的某个地方。另一种方法是添加一些代码来强制重定向(例如,测试您在 website/index.php 中定义的常量是否已设置,如果未设置,则重定向到它的纯路由)。
  • @tiagocalado 如果你有 Apache,你应该可以使用.htaccess。不幸的是,我没有很多调试 Apache 脚本的经验。
【解决方案2】:

只需使用此代码

<?php
  $uri = urldecode(
 parse_url($_SERVER['REQUEST_URI'], 
 PHP_URL_PATH)
 );

 if ($uri !== '/' && 
 file_exists(__DIR__.'/subfolder'.$uri)) {
 return false;
 }

 require_once 
  __DIR__.'/subfolder/index.php';

【讨论】:

  • 它适用于 index.php 子文件夹,然后我有 about ,这会打开带有 404 错误代码的 website/about.php ,我有 about.php 但在子文件夹中
  • 请在您的答案中添加一些解释,以便其他人可以从中学习。它如何包含子文件夹中的about.php?此外,您如何确保这不会造成可能包含系统中任何文件的安全问题?
  • 这是一个不完整的答案。您检查文件是否存在,但不对其执行任何操作。
  • @tiagocalado 您可以轻松地创建函数或路由以转到特定页面,例如代替 index.php 只需获取 url 并将其值存储在变量中,然后使用它代替索引。 php简单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多