【php】利用.htaccess文件使网站静态化,将php页面伪装成html

时间:2022-09-29 20:49:03

其实这部分内容在《【ThinkPHP】ThinkPHP下载、部署,Helloworld,消除难看的index.php》(点击打开链接)已经实现了,只是当时没有意识到其实对于网站下的所有php,都是可以将原本是http://xxx.com/1.php搞成http://xxx.com/1.html,这样一来便于搜索引擎的收录,二来别人不知道你的网站是用什么语言写的。

这部分也是php静态化、URL重写的内容。

一、打开Apache2.4服务器的URL重写功能

1、打开Apache2.4服务器中的httpd.conf,httpd.conf在类似C:\Apache24\conf这个位置。如下图,搜索mod_rewrite.so,大约158行的位置,删除前面的#,让Apache2.4加载了mod_rewrite.so模块

【php】利用.htaccess文件使网站静态化,将php页面伪装成html

2、继续在httpd.conf配置文件找到“AllowOverride None”将None改为 All。这点值得注意的是,“AllowOverride None”在文件中能找到几处,但要改的却只有一处,如下图,就是在第267行左右的位置,这个AllowOverride None。

【php】利用.htaccess文件使网站静态化,将php页面伪装成html

之后Apache2.4就弄完了,支持url重写了,重启一下Apache2.4生效。

二、对相关的php站点的url进行重写

1、利用控制台cmd新建一个没有文件名的.htaccess文件,由于这个文件没有这个文件名,在windows中必须通过控制台新建。

输入如下命令,先用cd命令进入此目录,再用type nul>.htaccess新建。

如下图,就是在myTP这个php站点成功建立了一个.htaccess文件

【php】利用.htaccess文件使网站静态化,将php页面伪装成html

新建完毕,用记事本或者notepad++之类的打开此.htaccess输入如下内容,保存退出:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)\.html$ $1.php [NC]
</IfModule>

以上的表达式意为:

如果通过.html进入,浏览器地址栏显示的是.html扩展名,但服务器上实际执行的是.php。

必须保证服务器上有对应的.php,否则会404

浏览器和搜索引擎可以同时通过.htm和.php访问网页

如果该目录上存在.html,将被忽略

[NC]表示“不区分大小写”。

如下图,这是我的php站点:

【php】利用.htaccess文件使网站静态化,将php页面伪装成html

里面并没有helloworld.html,仅有如下的一个helloworld.php:

<?php
echo "Hello world!";
?>

通过这样设置之后,如下图,在浏览器访问helloworld.html,用户也觉得自己是在访问helloworld.html,不过实际上却是在执行helloworld.php的代码:

【php】利用.htaccess文件使网站静态化,将php页面伪装成html

而关于Get参数,在如上配置.htaccess之后同样可以传递,比如在《【php】php中获取任意个参数》(点击打开链接)介绍过了的numUndefindParameter.php:

<?php
$paramstr=$_SERVER['QUERY_STRING'];//获取参数字符串
$arr = explode("&",$paramstr);//先根据&这个字符分割一个个参数存入数组$arr
foreach($arr as $element){//再遍历$arr这个数组
$arr2= explode("=",$element);//对其中的每一个元素进行根据=进行分割,再存入数组
echo "${arr2[0]}的值为:${arr2[1]}";//=前面的字符串是参数名,后面的字符串是参数值
echo "<br/>";
}
?>

在html后面接一堆参数之后,同样可以得到相应的结果:

【php】利用.htaccess文件使网站静态化,将php页面伪装成html