PHP本地如何实现伪静态页面
Apache的 mod_rewrite是比较强大的,在进行网站建设时,可以通过这个模块来实现伪静态。
主要步骤如下: 1检测Apache是否开启mod_rewrite功能 可以通过php提供的phpinfo()函数查看环境配置,找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。如果没有开启“mod_rewrite”,则打开目录 apache目录下的“/apache/conf/” ,找到 httpdconf 文件,再找到“LoadModule rewrite_module”,将前面的”#”号删除即表示取用该功能。 如果没有查找到“LoadModule” 区域,可以在最后一行加入“LoadModule rewrite_module ,modules/mod_rewriteso”(独占一行),之后重启apache服务器。再通过phpinfo()函数查看环境配置就有“mod_rewrite”为项了。
2让apache服务器支持htaccess 如何让自己的本地APACHE服务器支持:“htaccess”呢 只需修改apache的httpdconf设置就可以让 APACHE支持“htaccess”了。打开 APACHE目录的CONF目录下的httpdconf文件,找到: Options FollowSymLinks AllowOverride None 改为 Options FollowSymLinks AllowOverride All 就行了。
3建立htaccess 文件 建立htaccess文件时要注意,不能直接建,方法是通过记事本中的另存为菜单,在文件名窗口输入:“htaccess”,然后点击保存。
4rewrite规则学习 在新建htaccess文件之后,就在里面写入以下内容: RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭 RewriteRule ([0-9]{1,})$indexphpid=$1 在这里,RewriteRule是重写规则,是用正则表达式的句子,([0-9]{1,})表示由数字组成的,$表示结束标志,表示以数字结束!如果要实现伪静态页面,规则如下: RewriteEngine on RewriteRule ([a-zA-Z]{1,})-([0-9]{1,})html$indexphpaction=$1&id=$2 在为个正则表达式中,([a-zA-Z]{1,})-([0-9]{1,})html$是规则,indexphpaction=$1&id=$2是要替换的格式,$1代表第1括号匹配的值,$2代表第二个括号的值,如此类推! 测试PHP脚本如下: indexphp文件中的代码如下: echo ‘你的Action值为:’ $_GET['action']; echo ‘ ’; echo ‘ID值为:’ $_GET['id']; >
在浏览器地址栏输入: localhost/page-18html 输出的是: 你的Action值为:page ID值为:18
apache的rewrite重写就是根据你输入的地址,访问你重定向以后的实际地址。一般来说,伪静态指的就是url显示的是html的,但是实际访问的是php文件,这叫伪静态。
如果你希望URL显示的就是listphpid=N这种形式,就不是伪静态了,是强制跳转。一般是用于空白页面或者参数不合法时的跳转,如果你真希望这样做,只需要如下修改:
RewriteRule ^list-([0-9]+)\html$ list\php\id=$1 [R]
也就是在重写的末尾加上R,R的意思就是强制跳转。
如果对你有帮助,希望采纳,如果有疑问,可以继续追问或者百度HI留言。谢谢。
1、实现伪静态方法:
1)隐藏入口文件:http://docthinkphpcn/manual/hidden_indexhtml
2)结合使用URL路由:http://docthinkphpcn/manual/url_routehtml
3)配置伪静态后缀名:HTML_FILE_SUFFIX => '';
上面三个都用上,基本都OK了!当然,还可以通过服务器重写URL
2、设置让地址栏不能访问文件夹:
1)每个文件夹添加一个indexhtml空文件(因服务器默认的首页而异同),假如默认首页是 indexhtml 那就 添加indexhtml
2)也可以通过服务器配置目录访问权限
IIS配置支持伪静态 ISAPI Rewrite(win2003系统)
第一:首先我们需要下载一个ISAPI_Rewrite,有精简版和完全版,一般精简版只能对服务器全局进行配置,而完整版可以对服务器上的各个网站进行伪静态配置对于个人站长来说,精简版就足够了
下载:http://wwwisapirewritecom/download/isapi_rwl_0055msi
第二:下载完成后,可以找到安装包里的msi的文件,安装即可
随便装在哪都可以,默认是装在C:\Program Files\Helicon下,要注意的是这个目录everyone要有读取权限。我就因为当时服务器权限配的比较严格,默认安装Helicon这目录EVERYONE是没有任何权限的,结果老是出现:Service Unavailable 。
第三:打开Internet 信息服务,右键,web站点属性,点击ISAPI筛选器选项卡添加筛选器,这里的名称可以自己随意填写,路径自己指定ISAPI_Rewritedll,然后确定
下面我们先做一个测试页newasp,可以按照下面的代码写
然后,在浏览器中输入:
http://127001/newaspid=1234
接着你就可以在网页上看到一行文字:"1234"
看到这几个数字,就说明你测试成功了
现在我们开始来配置ISAPI_Rewrite :
打开ISAPI_Rewrite的目录,把httpdini的只读属性去掉,打开编辑我们现在是需要把newaspid=1234修改成类似new_1234html的路径,因此,我们需要在httpdini中添加一句
RewriteRule /new_([0-9,a-z])html /newaspid={GetProperty(Content)}
保存后,我们就可以测试一下这个网址了:http://127001/new_1234html
可以看到页面上的"1234"了吧,就这样伪静态配置成功了!
1 第一:检测 apache是否开启mod_rewrite
2 通过php提供的phpinfo()函数查看环境配置,在"apache2handler —> Loaded
Modules"里看是否有"mod_rewrite"模块,如没开启则在apache配置文件httpdconf 中找到"#LoadModule
rewrite_module modules/mod_rewriteso"去掉前面的"#"号,重启apache即可
3 第二:检测apache是否支持 "htaccess"
4如测试中不支持"htaccess",那在apache配置文件httpdconf 中找到""与""内的"AllowOverride
None"改为"AllowOverride All",重启apache即可
5
{让apache服务器支持htaccess,如何让自己的本地Apache服务器支持”htaccess”呢其实只要简单修改一下apache的httpdconf设置就可以让支持htaccess了。打开httpdconf文件,用文本编辑器打开后查找
6 Options FollowSymLinks
7 AllowOverride None
8 改为
9Options FollowSymLinks
10AllowOverride All
11就是把None修改为All}
12 第三:创建htaccess 文件
13 创建htaccess
文件方法:新建文本文档,名字为"htaccesstxt",再打开"htaccesstxt"另存为,此时注意,名称改为
""htaccess""保存即可
14 第四:测试伪静态实例
15 htaccess文件中输入:
16 RewriteEngine on
17 RewriteRule ([a-zA-Z])-([0-9])-([0-9])\html$
indexphpaction=&id=&page=
18 新建indexphp文件并输入:
19 echo 'action='$_GET['action'];
20 echo '
id='$_GET['id'];
21 echo '
page='$_GET['page'];
22 >
23 在地址栏中输入 http://127001/view-8-2html 按回车将显示出参数:
24 action=view
25 id=8
26 page=2
1、要能够实现伪静态,服务器环境本身支持url rewrite重写功能,能正确识别出以路径符号 "/" 为间隔的url地址,这是必要的条件。
以apache为例说明如可开启伪静态:打开apache的配置文件(apache/conf/httpdconf)找到对应的web目录配置项,修改为如下:
<Directory "YourDocumentRoot"> //前面的YourDocumentRoot改为你自己的web路径
Options Indexes FollowSymLinks ExecCGI Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
注意:确保 AllowOverride 为 All
重启服务即可。
2、在你的web目录下添加一个htaccess文件,在里面添加代码如下:
<IfModule mod_rewritec>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(index\php|robots\txt|tags)
RewriteRule ^()$ indexphp/$1 [L]
</IfModule>
3、再试一下就可以的了,如果不行先看一下自己的PHP版本,最好是50以上的,htaccess文件的代码也调试一下。
php伪静态 是把你的链接改成 html后缀之类的,从链接上看起来像静态的页面。
php模板只是提供给php程序显示数据的,php模板虽然可以是htm格式,但是在打开网页的时候仍然是php格式的。
PHP实现伪静态化页面方法一:
在你的程序初始化时使用如下代码:
<php
$Php2Html_FileUrl = $_SERVER["REQUEST_URI"];
$Php2Html_UrlString = str_replace("/", "", strrchr($Php2Html_FileUrl, "/"));
$Php2Html_UrlQueryStrList = explode("@", $Php2Html_UrlString);
foreach($Php2Html_UrlQueryStrList as $Php2Html_UrlQueryStr)
{
$Php2Html_TmpArray = explode("|", $Php2Html_UrlQueryStr);
$_GET[$Php2Html_TmpArray[0]] = $Php2Html_TmpArray[1];
}
echo '假静态:$_GET变量<br />';
print_r($_GET);
>
然后php中调用$_GET变量就像平常一样了。
连接使用方式:
php/param1|1234@param2|4321
和phpparam1=1234m2=4321一样。
PHP实现伪静态化页面方法二:通过URL Rewrite实现链接静态化
我们知道搜索引擎对于静态页面是非常友好的,因此很多网站通过生成静态页面等手段方便爬虫抓取自己网站的内容。但是有时候一些应用并不适合全部静态化,比如数据变化非常大的论坛/贴吧系统,这时候我们可以通过URL重写来实现链接的伪静态化,即网站对外使用静态化的链接,而内部实际上仍然使用动态页面的 URL形式。比如像这样一个链接:http://wwwci123com/abcphpaction=a&id=1,我们可以改写成http://wwwci123com/abc/a/1html的形式。这是搜索引擎优化最重要的内容之一,它还有一个额外的好处,可以使页面有一个永久链接,即便以后网站系统内部链接有变化,通过适当改变Rewrite规则就可以保证原先的外部URL一直有效。
下面介绍2种简单的Apache+PHP下实现URL重写的方法,第一种适合有服务器配置权限的用户,第二种适合租用空间的用户,也作为我近期的学习心得的整理。
1、对于有服务器配置权限的用户,推荐使用Apache的mod_rewrite模块,这里假设已经安装好mod_rewrite模块。打开Apache的配置文件,找到相应主机的部分,添加以下代码:
RewriteEngine On RewriteRule ^/abc/([a-z]+)/([0-9]+)html$ /abcphpaction=$1&id=$2
然后在shell里执行service httpd reload,让Apache重新载入配置就好了。现在在PHP页面里面我们可以把链接写成 abc/a/1html的形式,Apache在解析这个 URL的时候会rewrite成abcphpaction=a&id=1的形式,并返回正确的页面。运用正则表达式我们可以实现几乎任何我们想要的链接形式,mod_rewrite模块的功能异常强大,这里只是一个及其简单的应用。
2、对于租用空间的用户,一般都没有办法修改Apache的配置,这里有个变通的方法,原理是这样的:当要传递参数访问PHP 页面时,正常情况下是通过自动全局变量$_GET来获得,比如上面的链接,在页面里可以通过$_GET['action'] 和 $_GET['id'] 来获得,重写URL后就不行了。现在在每个页面里require一个url_rewritephp文件,里面代码如下:
$filename = basename($_SERVER['SCRIPT_NAME']);
if (strtolower($filename) == "abcphp"){
if (!empty($_GET[id])){
$id = intval($_GET[id]);
$action = intval($_GET[action]);
}
else {
$nav = $_SERVER["REQUEST_URI"];
$script = $_SERVER["SCRIPT_NAME"];
$nav = ereg_replace("^$script", "", urldecode($nav));
$vars = explode("/", $nav);
$action = intval($vars[1]);
$id = intval($vars[2]);
}
}
这样$action和$id也得到了,页面里链接可以写成abcphp/a/1的形式来访问相应页面。
需要注意的是这种PHP实现伪静态化页面方法效率较第一种低,第一种方法是在WEB服务器URL解析过程中实现的,而这里是在PHP页面解析过程里实现的,第2种方法只是变通,不得已而为之,要修改链接形式很不方便也不灵活。
0条评论