问题标题可能有点误导,但我想不出更好的方式来表达它。
确保PHP应用程序可以在任意数量的环境中运行(就超链接而言......)创建URL的最佳方法是什么?
我在应用程序根目录中的index.php引用了一个处理所有请求的base.php(控制器)文件。
所以我一直在使用:
$_SERVER['DOCUMENT_ROOT'] . "/url/to/file/i/want.php";
这是正确的方法,还是有更好的方法?这是有效的,因为每个请求都来自index.php文件......
答案 0 :(得分:2)
这应该可行,或者只是使用相对路径。
您还可以实施其他方法,例如,您可以将超链接设为:
// this part could be established in a shared header/include/global variable for your scripts
$site_domain = 'http';
if ($_SERVER["HTTPS"] == "on") {$site[url][full] .= "s";}
$site_domain .= "://";
$site_domain =$site_domain .$_SERVER['SERVER_NAME'];
// you would then have links in your scripts coded as: $site_domain."/cleanurl/
$ site_domain为您提供基本域引用,动态到托管脚本的任何位置,然后您可以创建链接:$site_domain."/cleanurl/";
“cleanurl
”是指您要加载的网页的基于上下文的引用(例如“新闻”,如www.mydomain.com/news /)。
然后,您可以使用.htaccess和Apache mod_rewrite来处理这些URL随后指向的位置:
RewriteEngine On
RewriteRule ^cleanurl/$ /url/to/file/i/want.php [NC,L]
因为相对路径是从.htaccess中的根目录使用的,所以一旦设置,您就不需要进行更改。
另一个好处是你最终会得到“干净”,“可读”的链接 - 如果你移动脚本与文件结构相关的位置,你就不必去寻找链接到它们的所有脚本单独编辑链接 - 您只需更改.htaccess中的一行。
答案 1 :(得分:0)
我不知道这是否也是正确的方法,但我倾向于在我的代码中指定$ link_path和$ file_path,然后我将这些用于页面上的链接并分别包含/ require。
通过这种方式,我知道它总会像我期望的那样工作
$link_path = './';
$file_path = './';
// Show a link
echo '<a href="' . $link_path . 'my_file.php">Go to my_file.php</a>';
// Include a file
require_once($file_path . 'my_file.php');
这样它对我来说很灵活,特别是如果我使用mod_rewrite来重写URL