我目前正在本地计算机上开发一些软件。为了这个问题,我们可以调用软件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,以便在部署时尽量少做一些工作?
答案 0 :(得分:1)
相对于根目录启动它们:/
。
例如:
/StackOverflow/index.php
/StackOverflow/content/page1.php
/StackOverflow/content/page2.php
/StackOverflow/content/page3.php
它们将自动以当前域或您设置为<base>
的任何内容为前缀。
答案 1 :(得分: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';
答案 2 :(得分: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
答案 3 :(得分:1)
我通常在app的配置文件中设置$ baseurl和$ basepath变量,指向我的应用程序的根目录,在我的前端,我只是在我的url前面加上这些变量。
通过这种方式,您可以轻松地将您的网站从一台服务器转移到另一台服务器,它也适用于子目录中的应用
答案 4 :(得分:1)
如果你想动态,你可以这样做:
$pathInfo = pathinfo($_SERVER['SCRIPT_NAME']);
$baseUrl = rtrim($pathInfo['dirname'], "\\/");
我将此baseUrl保存在我的请求对象中,并在我的视图脚本中使用它。这取决于你..
像这样使用:
<a href="<?php echo $baseUrl; ?>/content/page1.php">Test</a>
如果您发送电子邮件,并且需要链接回网站,有时您需要绝对网址:
$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
。
答案 5 :(得分: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