我的本地计算机上有一个网站(Windows 7,XAMPP)。我的网站使用了一些PHP包含。包含将出现在网站的许多页面上,可能嵌套在许多级别的目录中。这使得无法使用相对链接。通过使用绝对链接解决了这个问题,但绝对链接在本地计算机上与远程服务器上的不同。例如,我会为Web服务器编写一个包含文件,如:
<nav id="main">
<ul>
<li><a href="http://domainname.com/topic1/">Topic1</a></li>
<li><a href="http://domainname.com/topic2/">Topic2</a></li>
</ul>
</nav>
但在我的本地机器上,我必须写:
<nav id="main">
<ul>
<li><a href="C:\xampp\htdocs\website\topic1\index.php">Topic1</a></li>
<li><a href="C:\xampp\htdocs\website\topic2\index.php">Topic2</a></li>
</ul>
</nav>
有谁知道这个问题一般是如何处理的?
答案 0 :(得分:2)
大多数框架通过使用配置值($base_url = 'http://www.domain.com';
)处理此问题,然后在创建链接时调用它。
<nav id="main">
<ul>
<li><a href="<?php echo $base_url;?>/topic1/">Topic1</a></li>
<li><a href="<?php echo $base_url;?>/topic2/">Topic2</a></li>
</ul>
</nav>
只要您记得在服务器之间移动时更改基本URL,这就可以解决问题。
但是,您仍然不应该链接到C:\xampp\htdocs\website\topic1\index.php
之类的内容,它应该是http://localhost/website/topic1/index.php
。
答案 1 :(得分:2)
无需将文档根存储在配置中,每次重新定位应用程序时都必须更改它。
使用DOCUMENT_ROOT服务器变量:
<a href="<?php echo $_SERVER['DOCUMENT_ROOT']; ?>/path/to/file.php">Link</a>
答案 2 :(得分:1)
您可以在随处包含的配置.php文件中定义常量:
define('ROOT_URL', '/');
如果您使用的是Windows匹配(您可能会在http://localhost/...
运行网络应用,而不是C:\
请求PHP文件),请将其更改为:
define('ROOT_URL', '/website');
然后在生成链接时使用此常量:
<li><a href="<?php echo ROOT_URL ?>/topic1/index.php">Topic1</a></li>
答案 3 :(得分:1)
您可以使用相对链接(正斜杠是不错的选项):
<a href="../topic2/index.php">Link to Topic 2</a>
或使用PHP变量的绝对链接:
<?php
$topUrl = 'c:/xampp/htdocs/website';
?>
<a href="<?=$topUrl?>/topic2/index.php">Link to Topic2</a>
但我的优先解决方案是使用一些模板引擎 - 我预感Smarty。
答案 4 :(得分:1)
“/”相当于'http://www.mydomain.com'或'http:// localhost'(您网站的根目录)并保留您的http或https协议,为什么已经存在?如果您将网站嵌套在文件夹中,那么测试并不是一个好主意。我将要测试的应用程序放入我的本地服务器根文件夹进行测试(就像真正的网络服务器一样)并在我没有测试它时将其删除是一个非常简单的解决方案。
<nav id="main">
<ul>
<li><a href="/topic1/index.php">Topic1</a></li>
<li><a href="/topic2/index.php">Topic2</a></li>
</ul>
</nav>
答案 5 :(得分:0)
Personaly我会按照以下方式进行
的config.php
if ($_SERVER['REMOTE_ADDR'] == 'your pc ip here') {
// Its for the local site
$rootUrl = 'http://localhost/'; // The url needed for the local website
} else {
// The url for the online version
$rootUrl = 'http://mydomain.com/';
}
// Set the url ready
define('ROOT_URL', $rootUrl);
需要网址的文件
<?php include('config.php'); // Path to the config file ?>
<nav id="main">
<ul>
<li><a href="<?php echo ROOT_URLl;?>topic1/">Topic1</a></li>
<li><a href="<?php echo ROOT_URLl;?>topic2/">Topic2</a></li>
</ul>
</nav>