1

我目前正在本地机器上开发一些软件。为了这个问题,让我们调用软件StackOverflow。我有以下页面

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

在我当前的环境中将http://localhost/StackOverflow/index.php成功运行。我为内容页面编写的 URL 看起来类似于http://localhost/StackOverflow/content/page1.php.

但是,当我将其部署到生产环境时,URL 将不再是本地主机,而是尚未确定的 IP 或主机名。我应该如何编写我的 URL,以便在部署时尽可能少地做工作?

4

6 回答 6

2

相对于根启动它们:/.

例如:

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

它们将自动以当前域或您设置为<base>.

于 2013-07-16T14:21:58.013 回答
1

您不需要绝对的 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'] = '/StackOverflow';

// then when you echo an url you can just
echo $config['baseurl'] . '/content/page1.php';
于 2013-07-16T14:24:43.977 回答
1

始终使用相对 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

于 2013-07-16T14:25:56.403 回答
1

我通常在我的应用程序的配置文件中设置一个 $baseurl 和一个 $basepath 变量,指向我的应用程序的根目录,在我的前端,我只是在我的 url 前面加上这些变量。

通过这种方式,您可以轻松地将您的站点从一台服务器转移到另一台服务器,并且它也适用于子目录中的应用程序

于 2013-07-16T14:26:43.927 回答
1

如果你想要它动态,你可以这样做:

$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.

于 2013-07-16T14:29:59.700 回答
1

我总是在配置文件中分配几个常量,并以此为基础。

 if ($_SERVER["APP_ENVIRONMENT"] == "development"){
   define("BASE_PATH", "C:/sites/StackOverflow/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");

您可以使用 PutEnv 在每个环境的基础上在 htaccess 中设置 $_SERVER["APP_ENVIRONMENT"]

SetEnv APP_ENVIRONMENT development
于 2013-07-16T14:31:57.887 回答