Безопасный способ написания URL-адресов, которые передаются между средами

В настоящее время я занимаюсь разработкой программного обеспечения на своем локальном компьютере. Ради этого вопроса, давайте назовем программное обеспечение Stackru, У меня есть страницы ниже

C:\sites\Stackru\index.php
C:\sites\Stackru\content\page1.php
C:\sites\Stackru\content\page2.php
C:\sites\Stackru\content\page3.php

В моей нынешней обстановке собирается http://localhost/Stackru/index.php работает успешно. И URL-адреса, которые я написал для страниц контента, будут выглядеть примерно так: http://localhost/Stackru/content/page1.php,

Однако, когда я разверну это в рабочей среде, URL-адрес больше не будет локальным хостом, а скорее будет IP-адресом или именем хоста, которое еще предстоит решить. Как мне писать свои URL-адреса, чтобы при развертывании мне приходилось выполнять как можно меньше работы?

6 ответов

Решение

Запустите их относительно корня: /,

Например:

/Stackru/index.php
/Stackru/content/page1.php
/Stackru/content/page2.php
/Stackru/content/page3.php

Они будут автоматически иметь префикс с текущим доменом или с тем, что вы указали в качестве <base>,

Я всегда назначаю пару констант в конфигурационном файле и основываю все мои пути на этом.

 if ($_SERVER["APP_ENVIRONMENT"] == "development"){
   define("BASE_PATH", "C:/sites/Stackru/development/");
   define("BASE_URL", "/development/");
 } else {
   define ("BASE_PATH", "/home/www.mysite.com/htdocs/");
   define ("BASE_URL", "/");
 }

Затем при выполнении URL я строю путь как

 $url = BASE_URL."path/to/whatever.jpg";

И для ссылок на файлы

 include (BASE_PATH."libraries/mylib.php");

Вы можете установить $_SERVER["APP_ENVIRONMENT"] в htaccess для каждой среды, используя PutEnv

SetEnv APP_ENVIRONMENT development

Вам не нужен абсолютный http-путь, это на самом деле потенциально проблематично, если вы используете HTTPS, так как любая из этих ссылок, все еще указывающих на HTTP, может привести к тому, что браузеры отобразят ошибку "небезопасного содержимого"

// This allows you to deploy to different enviroments where some might
// have the page _not_ in the site root, without having to edit
// 1000s of lines of code.
$config['baseurl'] = '/Stackru';

// then when you echo an url you can just
echo $config['baseurl'] . '/content/page1.php';

Если вы хотите это динамически, вы можете сделать это так:

$pathInfo = pathinfo($_SERVER['SCRIPT_NAME']);
$baseUrl = rtrim($pathInfo['dirname'], "\\/");

Я сохраняю этот baseUrl в своем объекте запроса и использую его в своих скриптах вида. Это до вас..

Используйте это так:

<a href="<?php echo $baseUrl; ?>/content/page1.php">Test</a>

Иногда вам понадобится абсолютный URL, если вы отправите электронное письмо, например, и вам понадобится ссылка на сайт:

$rootUrl = 'http';
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
    $rootUrl .= 's';
}
$rootUrl .= '://'.$_SERVER['SERVER_NAME'];
if ($_SERVER['SERVER_PORT'] != '80') {
    $rootUrl .= ':'.$_SERVER['SERVER_PORT'];
}
$rootUrl .= $baseUrl;

использование $rootUrl так же, как $baseUrl,

Я обычно устанавливаю переменную $baseurl и $basepath в конфигурационном файле моего приложения, указывающую на корневой каталог моего приложения, а во внешнем интерфейсе я просто добавляю свои URL к этим переменным.

Таким образом, вы можете легко перенести свой сайт с одного сервера на другой, и он также работает с приложениями в подкаталогах

Используйте всегда относительные URL-адреса, чтобы иметь возможность переносить сайт не только между серверами, но и между каталогами на одном сервере.

Относительный обычно начинается с вашего текущего местоположения файла. Обычно у меня есть index.php, включая другие файлы. Итак, все это относительно корневого местоположения:

./ means same path
./test/ means one level up
../ means 1 level-below
../../ means 2 levels-below etc

Увидеть

http://www.webdevelopersnotes.com/design/relative_and_absolute_urls.php3

Другие вопросы по тегам