【问题标题】:How to define Base Url in core php如何在核心 php 中定义 Base Url
【发布时间】:2019-08-14 14:33:41
【问题描述】:

嗯,我正在研究核心 php,我无法为我的应用程序定义一个恒定的基本 URL。

我在 mac os 上使用 xampp,我在 htdocs/myproject/private 目录中有主文件 initilize.php,其中包含定义基本 URL 的代码

$url      = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$validURL = str_replace("&", "&amp", $url);

现在,当我在 myproject/index.php 中包含 initialize.php 文件时,

<?php
require_once 'private/initialize.php';
header('Location: site/');

我得到 BASE_URL 为 http://localhost/myproject/site ,但是当我在 site/create.php 中包含 initilize.php 文件时,我得到了 BASE_URL http://localhost/myproject/site/create.php,我无法为 myproject 定义基本 URL,在 xampp 情况下是 localhost/myproject,部署后它必须是 http://subdomain.myproject.com 在这方面的任何建议。提前致谢。

【问题讨论】:

  • 好吧,我定义了,define("BASE_URL", $validURL);

标签: php routing


【解决方案1】:

您可以像这样为您的myproject 目录定义一个静态 base_url

$protocol   = if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
$servername = filter_input(INPUT_SERVER, 'SERVER_NAME');
$url        = $protocol . $servername;
if (strstr($servername, 'localhost')) {
   $url        .= '/myproject/'; // add project directory on localhost setup
}
$validURL   = str_replace("&", "&amp", $url);

【讨论】:

    【解决方案2】:

    您可以通过使用环境变量(.env 文件或 apache/nginx 配置)来实现,也可以如下所示手动设置它,如果您使用 /myproject 部分,则可以在本地主机上找到基本 url 没有任何魔法给它。

    $protocol = if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
    $baseUrl = $protocol . $_SERVER['HTTP_HOST'];
    
    if (strstr($baseUrl, 'localhost')) {
       $baseUrl = 'http://localhost/myproject/site';
    }
    

    【讨论】:

      【解决方案3】:

      最后,我用下面的代码解决了我的问题

      /*
       * Assign the root URL to a PHP constant
       * Do not need to include the domain
       * Use same document root as web server
       * Can dynamically find everything in URL up to "/site"
       */
      $site_end = strpos($_SERVER['SCRIPT_NAME'], '/site') + 5;
      $doc_root = substr($_SERVER['SCRIPT_NAME'], 0, $site_end);
      define("WWW_ROOT", $doc_root);
      $url      = "http://" . $_SERVER['HTTP_HOST'] . WWW_ROOT;
      $validURL = str_replace("&", "&amp", $url);
      define("BASE_URL", $validURL);
      

      它总是返回 BASE_URL = http://localhost/myproject/site

      【讨论】:

      • 使用HTTP_HOST 是不安全的,因为Host 标头可以被欺骗。 @Hasta Dhana 的解决方案使用 SERVER_NAME 更安全,因为这将来自您的服务器配置。
      猜你喜欢
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 2020-11-25
      • 2022-12-09
      • 1970-01-01
      • 2012-09-13
      相关资源
      最近更新 更多