<base href= < php,如何正确定义项目下的base href(页面中所有相对链接的基准URL)...

/**

* ThinkSNS 版本,太过严密和可移植性,很多基本用不到,参考之

*/

echo '

';

echo PHP_SAPI,'
';//先查看web服务器和php之间的接口类型

//print_r($_SERVER);

define('IS_CGI',substr(PHP_SAPI, 0, 3)=='cgi' ? 1 : 0 );

if(IS_CGI) {

// CGI/FASTCGI模式下,(我没这个环境没有测试)

$_temp = explode('.php',$_SERVER["PHP_SELF"]);

define('_PHP_FILE_', rtrim(str_replace($_SERVER["HTTP_HOST"],'',$_temp[0].'.php'),'/'));

}else {

define('_PHP_FILE_', rtrim($_SERVER["SCRIPT_NAME"],'/'));

}

echo _PHP_FILE_,'
';

$_root = dirname(_PHP_FILE_);

define('__ROOT__', (($_root=='/' || $_root=='')?'':rtrim($_root,'/')));

echo __ROOT__,'
';

define('SITE_URL','http:'.'//'.strip_tags($_SERVER['HTTP_HOST']).__ROOT__);

echo SITE_URL,'
';

ThinkPHP的和ThinkSNS的大同小异,但是要简洁一些,感觉完全够用了

define('IS_CGI',substr(PHP_SAPI, 0,3)=='cgi' ? 1 : 0 );

defined('APP_NAME') or define('APP_NAME', basename(dirname($_SERVER['SCRIPT_FILENAME'])));

if(!defined('_PHP_FILE_')) {

if(IS_CGI) {

//CGI/FASTCGI模式下

$_temp = explode('.php',$_SERVER['PHP_SELF']);

define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/'));

}else {

define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'],'/'));

}

}

if(!defined('__ROOT__')) {

// 网站URL根目录

if( strtoupper(APP_NAME) == strtoupper(basename(dirname(_PHP_FILE_))) ) {

$_root = dirname(dirname(_PHP_FILE_));

}else {

$_root = dirname(_PHP_FILE_);

}

define('__ROOT__', (($_root=='/' || $_root=='')?'':$_root));

}

ThinkSNS和ThinkPHP他们定义SITE_URL的时候都做了足够的兼容,很多环境我预测不到,我只是写一个满足自己能使用的SITE_URL即可。

我做的实际测试:

//虚拟主机名为test.com

define('SITE_URL', 'http:'.'//'.$_SERVER['HTTP_HOST'].dirname($_SERVER["SCRIPT_NAME"]));

echo SITE_URL;

如果该脚本是项目根目录下的文件,执行该脚本,得到的结果为http://test.com/

如果该脚本在项目根目录下的子目录bbs下面,执行该脚本,得到的结果为http://test.com/bbb,而这种情况非常常见,比如我们要在一个网站的子目录下面安装一个论坛。

我做了如下增强,想必应对一般的小项目,这个配置应该是够用了吧!

$_root = dirname(rtrim($_SERVER["SCRIPT_NAME"],'/'));

define('SITE_URL', 'http:'.'//'.$_SERVER['HTTP_HOST'].(($_root == '/')?'':$_root));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值