本文目录一览:
求织梦手机站伪静态规则及URL 重写规则
最近很多朋友来问织梦58的站点的伪静态是怎么写的,今天就拿出来和大家分享一下子。呵呵
dedecms(织梦)完美实现伪静态的方法
dedecms(织梦)完美实现伪静态的方法
测试版本: Dedecms V5.6版本
测试平台: Windows 7
测试环境: IIS 7.5
成功。其他条件下大同小异。
需要的条件:
- 服务器必须支持URL重写。
- 后台开启伪静态。
- 栏目设置使用动态。
- 添加文档时选择使用动态浏览。
- 修改php文件
include/channelunit.func.php
。 - 修改
include/arc.listview.class.php
。 - 编写rewrite规则。
操作步骤:
- 加载Rewrite模块(过程略)。
- dedecms后台-系统-系统基本参数-核心设置-是否使用伪静态,选“是”。
- 把栏目和文档设置成为动态浏览。可以手动,用SQL语句更快。 dedecms后台-SQL命令行工具,执行以下语句:
-- 将所有文档设置为“仅动态浏览”
UPDATE dede_archives SET ismake=-1
-- 将所有栏目设置为“使用动态页”
UPDATE dede_arctype SET isdefault=-1
改成1就是静态。动态转换为静态后需要重新生成HTML。
添加栏目和文章默认为动态的一劳永逸的方法:
- 修改php文件
include/channelunit.func.php
: 查找:
return $GLOBALS["cfg_plus_dir"]."/view-".$aid.'-1.html';
修改为:
return "/view-".$aid.'-1.html';
查找:
return $GLOBALS['cfg_phpurl']."/view.php?aid=$aid";
修改为:
return "/view.php?aid=$aid";
其实页可以不修改,就是URL地址会长一点。这个是文章页的。 查找:
$reurl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$typeid;
修改为:
$reurl = "/list-".$typeid.".html";
这个必须修改,是栏目页的。
其实不修改也可以,但是URL地址会长一点。这个是文章的。
5. 打开 include/arc.listview.class.php
:
找到:
$plist = str_replace('.php?tid=', '-', $plist);
(大约在第964行) 在其前面添加一行:
$plist = str_replace('plus/list', 'list', $plist);
这个是列表页分页rewrite的url格式的。 默认是:
...
现在是:
...
- 设置重写规则,在
httpd.ini
里面写上:
[ISAPI_Rewrite]
# 缓存3600秒 = 1 小时(hour)
CacheClockRate 3600
RepeatLimit 32
# dedecms Rewrite规则
RewriteRule ^(.*)/index\.html $1/index\.php
RewriteRule ^(.*)/list-([0-9]+)\.html $1/plus/list\.php\?tid=$2
RewriteRule ^(.*)/list-([0-9]+)-([0-9]+)-([0-9]+)\.html $1/plus/list\.php\?tid=$2TotalResult=$3PageNo=$4
RewriteRule ^(.*)/view-([0-9]+)-([0-9]+)\.html $1/plus/view\.php\?arcID=$2pageno=$3
- 如果不使用动态首页: 把rewrite规则中的:
RewriteRule ^(.*)/index\.html $1/index\.php
去掉,或改为:
RewriteRule ^(.*)/index\.html $1/index\.html
否则打开时会陷入死循环。
说明:
RewriteRule ^view-([0-9]+)-([0-9]+)\.html /plus/view.php?aid=$1pageno=$2
此为文章分页重写命令。
2. 如果view替换成自己设置的其他词,则需要把 include/arc.archives.class.php
文件中的view同时替换掉。
3. 重写后的URL如下:
- 文章页:
- 列表页: 如果需要改成如下格式:
- 文章页:
- 列表页:
在
include/channelunit.func.php
中:
return $GLOBALS["cfg_plus_dir"]."/view-".$aid.'-1.html';
改为:
return "/abc/view-".$aid.'-1.html';
return $GLOBALS['cfg_phpurl']."/view.php?aid=$aid";
改为:
return "/abc/view.php?aid=$aid";
$reurl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$typeid;
改为:
$reurl = "/abc/list-".$typeid.".html";
重写规则改为:
RewriteRule ^(.*)/index\.html $1/index\.php
RewriteRule ^(.*)/abc/list-([0-9]+)\.html $1/plus/list\.php\?tid=$2
RewriteRule ^(.*)/abc/list-([0-9]+)-([0-9]+)-([0-9]+)\.html $1/plus/list\.php\?tid=$2TotalResult=$3PageNo=$4
RewriteRule ^(.*)/abc/view-([0-9]+)-([0-9]+)\.html $1/plus/view\.php\?arcID=$2pageno=$3
- 伪静态可能会出现多个url都是指向相同页面,如果看重SEO效果,则可用robots.txt屏蔽多余url。
什么叫php伪静态?
mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面。下面我详细说说它的使用方法。
1. 检测Apache是否支持mod_rewrite
通过php提供的 phpinfo()
函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。
如果没有开启“mod_rewrite”,则打开目录 您的apache安装目录“/apache/conf/” 下的 httpd.conf
文件,通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。
如果没有查找到,则到“LoadModule” 区域,在最后一行加入:
LoadModule rewrite_module modules/mod_rewrite.so
(必选独占一行),然后重启apache服务器即可。
2. 让apache服务器支持 .htaccess
如何让自己的本地APACHE服务器支持“.htaccess”呢?其实只要简单修改一下apache的 httpd.conf
设置就可以让 APACHE支持 .htaccess
了。
打开 httpd.conf
文件(在那里?APACHE目录的CONF目录里面),
用文本编辑器打开后,查找:
Options FollowSymLinks
AllowOverride None
改为:
Options FollowSymLinks
AllowOverride All
就可以了。
3. 建立 .htaccess
文件
有1种最简单的方法建立 .htaccess
文件:
用记事本打开,点击文件–另存为,在文件名窗口输入“.htaccess”,注意是整个绿色部分,也就是包含英文引号,然后点击保存就行了。
4. rewrite规则学习
我们新建一个 .htaccess
文件之后,就在里面写入以下内容:
RewriteEngine on # rewriteengine为重写引擎开关on为开启off为关闭
RewriteRule ([0-9]{1,})$ index.php?id=$1
我讲解一下 RewriteRule
:RewriteRule
是重写规则,支持正则表达式的,上面的 ([0-9]{1,})
是指由数字组成的,$
是结束标志,说明是以数字结束!
好吧,现在我们可以实现伪静态页面了,写下一下的规则:
RewriteEngine on
RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$ index.php?action=$1id=$2
([a-zA-Z]{1,})-([0-9]{1,}).html$
是规则,index.php?action=$1id=$2
是要替换的格式,$1
代表第一个括号匹配的值,$2
代表第二个,如此类推!!
我们写一个处理的PHP脚本:
// index.php
echo '你的Action是:' . $_GET['action'];
echo '</p>';
echo '你的ID是:' . $_GET['id'];
好了,我们现在在浏览器中输入:
localhost/page-18.html
输出的是:
你的Action是:page
你的ID是:18
php伪静态、url重写
你的想法是完全可行的,我举个例子告诉你。
你可以先看看这个文章,不懂的可以交流。
apache一般都是在目录下创建 .htaccess
来实现伪静态,IIS不是这样的,这跟PHP本身没有关系,这是http服务器与客户端浏览器之间的约定。
比如说:
RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$
index.php?action=$1id=$2
意思就是说当你访问类似 a_1.html
的时候,apache自动跳转到 index.php?action=$1id=$2
的地方,其中 $1
就是左边重写规则的第一个变量 ([a-zA-Z]{1,})
,$2
就是 ([0-9]{1,})
的第二个变量。
php如何实现网页静态
一、静态化的优点:
- 有利于搜索引擎收录网站页面的信息:搜索引擎更喜欢静态的,更便于抓取,搜索引擎SEO排名会更容易提高。
- 静态网页化网页稳定。
- 可以提高网页加载速度。
- 减轻服务器负担,浏览器不需要频繁调用数据库。
- 数据库出错不会影响正常访问。
二、伪静态
PHP伪静态:是利用Apache mod_rewite
实现url重写的方法。
改写访问地址,能够通过URL的PATHINFO模式来改动它。让它看上去更像一个静态页面。从而有更大的几率被搜索引擎抓取和收录,仅是对搜索引擎比较友好,伪静态化。
三、纯静态化
纯静态化,就是生成HTML文件的方式,我们需要开启PHP自带的缓存机制,即 ob_start
来开启缓存。而且在 ob_start
之前不能有任何输出,否则执行失败。然后我们用 ob_get_contents
函数来获取缓存中的内容,该函数会返回一个字符串。第三个函数就是 ob_end_clean
,它用来清空缓存中的内容并且关闭,成功返回True,失败返回False。
if(file_exists("match.html") && (time()-filemtime("match.html")) > 300) {
// 如果存在对应的静态文件,则直接访问
require_once("match.html");
} else {
// 这里用数组来仿真数据库操作,现实一般操作数据库得到对应数据
$student = array("huangxing","chenyuwei",'xufei','zhangjingwen','xuepei');
ob_start();
// 载入模板
require_once("muban.php");
file_put_contents("match.html", ob_get_clean());
require_once('match.html');
}
如何配置thinkphp的伪静态重写
满足thinkphp伪静态(url重写)条件:
- 服务器开启url_rewrite功能,linux空间的php虚拟主机只需要开启apache的
mod_rewriet
,如果是iis6.0就要安装ISAPI Rewrite模块,apache只要开启Mod_rewrite
功能就可以了。无忧主机是linux系统的空间,开通空间默认支持。 - Linux空间编辑
.htaccess
文件,windows空间编辑httpd.ini
文件。
thinkphp如何编写 .htaccess
文件?
无忧主机编写的thinkphp伪静态正则表达式 .htaccess
文件如下:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
请将上面正则表达式,保存为 .htaccess
文件,并放到thinkphp项目入口文件同级目录下。并且修改数据库配置(config.php)文件使网站支持url重写功能,加入代码:
define('URL_REWRITE', 2);