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));
base href= php,如何正确定义项目下的base href(页面中所有相对链接的基准URL)...相关推荐
- 【Android游戏开发二十七】讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置...
今天一个开发者问到我为什么游戏开发要删除项目下的hdpi.mdpi和ldpi文件夹:下面详细给大家解答一下: 首先童鞋们如果看过我写的<[Android游戏开发二十一]Android os设备谎 ...
- idea查看java文件编码_Intellij Idea编译项目下的.java文件时的编码问题
由<编译.java文件时的编码问题>可知,在编译.java文件的时候,需要正确指定一个编码方案,该编码方案用于解码.java文件的字节流. 那么在使用Intellij Idea编译(假定使 ...
- vue项目下props传进去的数据,生命周期勾子函数包括watch不触发的解决办法
vue项目下props传进去的数据,生命周期勾子函数包括watch不触发的解决办法 @TOC 遇到的问题 在深层props过程中,props的数据传到了目标文件 但却没有触发数据更新及页面更新: wa ...
- Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包
转载: http://xyly624.blog.51cto.com/842520/865630/ Maven项目下HttpServletRequest 或 HttpServletResponse需引用 ...
- maven项目下tomcat直接启动不了(LifecycleException)。报错如下截图
经查,tomcat项目下的lib中没有jar包,发布的时候没有将jar包发布上去.这个问题在我的博客中以前遇到过.如何将maven的jar发布到项目中,我的博客里面有记载 转载于:https://ww ...
- scala学习-12-scala读取java项目下Src目录下的properties文件
1.概述 scala读取java项目下Src目录下的properties文件 package scalaimport java.util.Properties import java.io.FileI ...
- Web项目下的WebRoot和WebContent
Web项目发布到Tomcat中. 在Eclipse中生成项目是WebContent目录 而在MyEclipse中生成的项目目录名字好像叫做WebRoot,那么如果把MyEclipse的项目导入到Ecl ...
- MyEclipse打不开项目下的jsp文件,或是打开jsp文件报错!
MyEclipse打不开项目下的jsp文件,或是打开jsp文件报错! 解决:出现此问题的根本原因是因为MyEclipse编译器默认的打开jsp文件的方式不对! 下面是设置MyEclipse打开jsp的 ...
- 徐磊语法 6 7 时态的正确定义
时态的正确定义 时:指时间状语 态:动作和时间状语之间的关系 决定态 (在前面,在后面) 在时间状语这一刻,动作已经是什么样子的.也就是跟时间状语的关系. 先通过时,确定时间状语的某一点,在通过态,告 ...
最新文章
- java main 方法不能执行,AndroidStudio无法执行Java的main函数
- 删除html中所有的脚本,从HTML内容中删除脚本标记
- 设计sample语言的语法_Verilog语法之〇:Verilog HDL简介
- 山大824计算机基础,山东大学2020年考研824计算机基础考试大纲
- xx闪购—搜索框和iconfont
- next主题美化——背景图片、页面透明化、阴影、圆角、动画
- excel打开html非常慢,打开excel很慢
- ESP32产品系列之智能插座(二),ESP32代码部分
- Arduino ESP32 通过定时器(Timer)功能唤醒深度睡眠
- 求矩阵伪逆的matlab方法,手把手教学
- [积水成渊]asp.net中HiddenField的使用
- SQL中NVL和NVL2有什么区别,以及NULLIF 的使用
- 京东方27寸液晶屏MV270FHM-N20参考参数
- 如何安装ubuntu kylin(优麒麟)?
- Fastbot_Android稳定性测试
- 控制系统的复域数学模型
- 学习机器学习四 回归模型——线性回归、L1正则化(Lasso回归)、L2正则化(ridge回归)
- OllyDbg使用学习 笔记
- DB2中对比两个表之间的数据差异
- JPEG系列四 JPEG图像压缩优化