王志勇 发表于 2011年02月25日 12:08
除了在大流量的情况下,IIS+PHP的速度远不如Apache+PHP之外,使用IIS+PHP的全能空间,不支持.htaccess文件。当然,在小流量的情况下,速度差别可能不是很大。如果不得不使用全能空间(因为国内的Linux主机实在是太少了),可喜的是,大多数使用IIS平台的服务器商,都支持自定义404错误页。Apache可以使用一个.htaccess文件可以为整个网站自定义404错误页,也可以每个文件夹单独使用一个.htaccess文件。但IIS,服务商可能一个站点只允许设置一个404错误页,所以本文的方法是使用根目录的404.asp或404.php,用这个文件来判断、自动包含相关的程序文件。总的来说,IIS+PHP有很多功能还是不如Apache+PHP那样方便的。今天经过测试,全能空间也能够使用用错误页,所以写了本文。由于本文是使用IIS的错误页实现静态化,所以不需要配置其它的文件如.htaccess文件、.config文件、也不需要配置Rewrite模块,是比较简单的。
IIS下要实现静态化(伪静态),如果你的网站有控制面板,可以设置404错误,一般服务商是让404错误页放在根目录,ASP语言为404.asp,PHP语言为404.php。如果没有控制面板,可以让服务器商手动设置一下。要实现静态化,需要学习一定的编程知识,在本机调试成功后,再上传,因为需要有大量的调试才会成功。本文的方法可能是书上没有的,也是我很常用的方法,这里举例说明如何实现:
以PHP为例:
将自定义错误页设置为根目录的404.php。404.php写入如下的程序:
<?$j=explode("/",$_SERVER['REQUEST_URI']);$i="au/$j[1].php";
if (file_exists($i)){header("HTTP/1.1 200 OK");include($i);}
else header("HTTP/1.1 404 Not Found");?>
说明:在本机测试中,我安装了IIS+PHP,因为IIS下为虚拟目录设置错误页为404.php,但没有成功,所以本机不使用IIS+PHP测试。在本机测试中使用Apache+PHP,并且在本机设置了虚拟主机。在PHP方面,Apache对于PHP要比IIS简化许多,IIS相对更麻烦一些。
本机使用Apache+PHP+本机虚拟主机来测试,并不影响上传到服务器的效果,效果是一样的,服务器的配置是IIS+PHP+远程虚拟主机。在PHP编程中,在本机设置虚拟主机是很必要的,可以减少很多不必要的麻烦,Apache在本机设置虚拟主机很简单,前面已写过,如http://www.auiou.com/relevant/00000576.jsp。
第一行$j=explode("/",$_SERVER['REQUEST_URI']);用于获取地址栏,$j[1]是根目录下的第1个层目录名,同理,$j[2]是第2个目录名、$j[3]是第3个目录名,等等,这也是我很常用的读取地址栏的方法。由于不同空间,配置环境不一样,需要先在网站的根目录建立一个测试页,查看<?=$_SERVER['REQUEST_URI']?>返回地址栏的值,Apache环境下返回的值是以/开头的,IIS环境下可能是很长的路径,如果是这种情况,需要把上述程序中的$j[1].php,改为$j[4].php或者其它的值,逐一测试。否则,会导致无法成功,因为这是十分关键的一步。au/$j[1].php,其中au需要在根目录建立一个au的文件夹,需要实现静态化的程序文件全部放在au文件夹。从第2行,可以看出其原理,就是判断au文件夹中的文件是否存在,如果存在,则包含调用;如果不存在,则返回404代码。其中最后一行让不存在时返回404代码,是不可省略的,因为我经过测试,很多全能主机,当设置了404错误页后,访问不存在的文件时,返回的是200正常代码,这会导致搜索引擎错误收录,而降低网站的权重。
要特别注意的是,网页上传到服务器后,如果静态化的网页可以显示,要测试一下网页的状态码,如果返回的不是200页,要修改header("HTTP/1.1 ……")的语句,例如header("Status: 200 OK");以及header("Status: 404 Not Found");。国外的Linux主机较多地可以使用header("Status: 200 OK");语句,国内主机则较多地可以使用header("HTTP/1.1 200 OK");语句。
把所有需要实现静态化的程序文件全部放在au文件夹,如下图:
/au/abc.php程序的在本机的预览效果如下图,上传到IIS+PHP的服务器也是这样的效果:
/au/defer.php程序在本机的预览的效果如下图:
ASP与上面PHP的方法是类似的,步骤和原理大致相同,只要把PHP语句转化为ASP语句。因为测试和转化要比PHP复杂一些,本文暂省略这部分程序,如果有网友需要,我再测试ASP下的静态化。(附:ASP的实现方法,已写在这里:http://www.auiou.com/relevant/00000658.jsp)因为404.asp在IIS下可执行,所以IIS+ASP一定可以实现地址栏静态化。在此也顺便提一下,我从事了6年多的ASP编程,2002年~2009年,后来转向PHP。ASP比PHP繁琐许多,祝大家早日投入PHP的怀抱,因为PHP比ASP容易很多。
如前面的实际测试:Rewrite与404页的区别,http://www.auiou.com/relevant/00000525.jsp,使用404页的页面,既不能获得地址栏的GET,也不能接收POST,但Apache的Rewrite页既可以用GET,也可以用POST。使用本文的方法,如果需要使用GET或POST,只能建立一个实际路径的PHP页或ASP页。
Apache+PHP实现静态化,建立.htaccess文件,编写相关的程序语句即可直接实现。
勇哥,你做jsp开发多长时间,看来你是“全能型”人才啊!
自由勇 2018-11-04 10:30
谢谢!ASP可以做到,不难。其实PHP比ASP更容易。
JSP开发的时间比较短。以前主要做ASP开发,后来主要做PHP开发。
《全能空间能够实现静态化(伪静态)(已测试成功)》一文中的404.php程序,对于使用全能空间的PHP程序适用。
虽然这些文章正在增多,但实际上,VPS的安装、配置比我们想象中容易得多,新机通常在半小时内能完成整个安装、配置。
置顶的文章:
论朋友圈可以发什么?
短信验证开发的方案分享
巡回更新:2018-09-21
速度是永恒的主题
UTF-8、HTTPS原来都是浮云
https安全吗?
独立博客有必要安装https吗?
近期的主题:
夜晚靓歌(10):你没看过的《星雨心愿》
Feedval、Blogval将下线/谈理财和生存
2024.9感言
人生讨论(20):有人借钱怎么办?(2)
人生讨论(19):迄今为止最强的情感频道
数码评测(67):让小米/红米手机的反应提高1~2倍
数码评测(66):无线网卡FW150UH VS FW150UH
数码评测(65):如何快速自制CPU天梯图?
数码评测(64):2024年,你还在用VGA线吗?
人生讨论(18):6年就可以实现财务自由
人生讨论(17):为什么总是受欺负?
人生讨论(16):要钱的最新妙招
创业杂谈(17):什么项目能赢利?
人生讨论(15):有人借钱怎么办?
数码评测(63):高清切换超级神器
数码评测(62):再谈视频的尺寸
数码评测(61):近期数码采购和折腾
人生讨论(14):看穿尊重
数码评测(60):图拉丁-最佳中配工作“免费”手机
创业杂谈(16):博客何时终结?
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +