Php 编写跨环境传输的URL的安全方法

Php 编写跨环境传输的URL的安全方法,php,url,localhost,href,production-environment,Php,Url,Localhost,Href,Production Environment,我目前正在本地机器上开发一些软件。为了解决这个问题,让我们调用软件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/

我目前正在本地机器上开发一些软件。为了解决这个问题,让我们调用软件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,以便在部署时尽可能少地工作?

相对于根目录启动URL:/

例如:

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

它们将自动以当前域或您设置为的任何域作为前缀。

相对于根启动它们:/

例如:

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

它们将自动以当前域或您设置为的任何内容作为前缀。

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

你不需要一个绝对的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';

始终使用相对URL,以便不仅能够在服务器之间传输站点,而且能够在同一服务器中的目录之间传输站点

相对文件通常从当前文件位置开始。通常我的index.php包含其他文件。所以,所有这些都是相对于根位置的:

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


始终使用相对URL,以便不仅能够在服务器之间传输站点,而且能够在同一服务器中的目录之间传输站点

相对文件通常从当前文件位置开始。通常我的index.php包含其他文件。所以,所有这些都是相对于根位置的:

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


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


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

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


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

如果您需要动态切换,您可以这样做:

$pathInfo = pathinfo($_SERVER['SCRIPT_NAME']);
$baseUrl = rtrim($pathInfo['dirname'], "\\/");
<a href="<?php echo $baseUrl; ?>/content/page1.php">Test</a>
我将此baseUrl保存在请求对象中,并在视图脚本中使用它。这取决于你

像这样使用它:

$pathInfo = pathinfo($_SERVER['SCRIPT_NAME']);
$baseUrl = rtrim($pathInfo['dirname'], "\\/");
<a href="<?php echo $baseUrl; ?>/content/page1.php">Test</a>

以与$baseUrl相同的方式使用$rootUrl。

如果需要动态使用,可以如下操作:

$pathInfo = pathinfo($_SERVER['SCRIPT_NAME']);
$baseUrl = rtrim($pathInfo['dirname'], "\\/");
<a href="<?php echo $baseUrl; ?>/content/page1.php">Test</a>
我将此baseUrl保存在请求对象中,并在视图脚本中使用它。这取决于你

像这样使用它:

$pathInfo = pathinfo($_SERVER['SCRIPT_NAME']);
$baseUrl = rtrim($pathInfo['dirname'], "\\/");
<a href="<?php echo $baseUrl; ?>/content/page1.php">Test</a>

使用$rootUrl的方法与使用$baseUrl的方法相同。

我总是在配置文件中分配几个常量,并将我的所有路径都基于此

 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中根据每个环境设置$_服务器[APP_ENVIRONMENT]

SetEnv APP_ENVIRONMENT development

我总是在一个配置文件中分配几个常量,并将所有路径都基于这些常量

 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中根据每个环境设置$_服务器[APP_ENVIRONMENT]

SetEnv APP_ENVIRONMENT development

这对我来说似乎很基本,所以我不知道为什么我不能把我的头绕在它周围。如果我坐在page1.php上,单击指向/StackOverflow/index.php的链接。浏览器如何知道我不打算转到/StackOverflow/content/StackOverflow/index.php?如果链接到StackOverflow/index.php,就会发生这种情况。请注意缺少了根斜杠。阅读这些答案可能会让你受益匪浅-这对我来说似乎很基本,所以我不确定为什么我不能把我的头绕在它周围。如果我坐在page1.php上,单击指向/StackOverflow/index.php的链接。浏览器如何知道我不打算转到/StackOverflow/content/StackOverflow/index.php?如果链接到StackOverflow/index.php,就会发生这种情况。请注意缺少根斜杠。阅读这些答案可能会对您有所帮助-