动态URL静态化

 更新时间:2016年11月25日 16:13  点击:2120

动态URL静态化的主要目的,其一是搜索引擎优化(SEO),其二是面向用户友好。动态URL静态化是把一个动态地址转化成一个静态地址。其实,这个静态地址的内容还是从动态地址来的,只是看起来,类似一个静态地址。例如,本站页面

 

http://www.xxx.cn/blog/read.php/416.htm

其真实地址是


http://www.xxx.cn/blog/read.php?416

采用一定的技术,把第一个地址指向第二个地址,也就实现了动态URL静态化的目的。

如 果进一步做到搜索引擎优化(SEO),可以尝试把地址修改成容易理解的文字,例如,416.htm可以修改为 child_kindergarten.html。这种做法在英文网站很流行,直接把标题作为连接就行了。中文网站实现比较困难。多数还是使用数字的。这 种做法主要针对Google,在目前的搜索引擎中,例如百度,MSN,Yahoo,没有谁比Google更重视url。

动态URL静态化 有两种办法,第一是使用Web服务器的,第二是编程实现。编程实现思路比较简单,这里暂时不多说。我们的网站 www.childhood.net.cn由于使用的是一个小型的虚拟主机,所以不支持地址转化,就只有使用php编程实现。当然,多数的程序已经包括了 这部分,不需要自己写程序了。我们使用的bo-blog也已经包括了编程动态URL静态化,尽管还不是很完全。

基于Web服务器的动态 URL静态化就简单的多。当然,这里面包括两个部分,第一是配置Web服务器。基本上,大家使用虚拟主机的比较多,不可能自己配置,提供商提供的空间支持 动态URL静态化就可以使用,不支持基本上也没有什么办法。对于自己架构服务器的人来说,这本身小才一碟,不许多说。所以,这里主要说如何进行转换。

首先,在服务器的根目录(例如public_html)建立一个文件名为.htaccess的文件。这个文件内容基本如下:

RewriteEngine on
RewriteBase /
RewriteRule ^post/([0-9]+).htm$ read.php?$1
RewriteRule ^post/([0-9]+)_([0-9]+).htm$ read.php?$1&page=$2
RewriteRule ^post/([0-9]+)_([0-9]+)_([0-9]+).htm$ read.php?$1&page=$2∂=$3

看懂了吧?如果懂正则表达式的人,马上明白怎么回事了。不懂得也没有关系,下面是一个常用正则表达式的列表,根据例子,稍微修改,就可以做到了。基本上,针对通常的连接转移,应该都可以很容易实现的。

下拉透明菜单


<script language="JavaScript">
var mmenus    = new Array();
var misShow   = new Boolean();
misShow=false;
var misdown   = new Boolean();
misdown=false;
var mnumberofsub=0;
var musestatus=false;
var mpopTimer = 0;
mmenucolor='#89CB10';mfontcolor='MenuText';mmenuoutcolor='#ADEF34';mmenuincolor='#B5E74E';mmenuoutbordercolor='#ECFA3A';mmenuinbordercolor='#5A2614';mmidoutcolor='#A9DA1D';mmidincolor='#799310';mmenuovercolor='#004080';mitemedge='0';msubedge='1';mmenuunitwidth=66;mmenuitemwidth=140;mmenuheight=25;mmenuwidth='100%';mmenuadjust=0;mmenuadjustV=0;mfonts='font-family: 宋体; font-size: 9pt; color: MenuText; ';mcursor='hand';
var swipeSteps = 4;
var swipemsec = 25;
var swipeArray = new Array();
function swipe(el, dir, steps, msec) {
 if (steps == null) steps = swipeSteps;
 if (msec == null) msec = swipemsec;
 if (el.swipeIndex == null)
  el.swipeIndex = swipeArray.length;
 if (el.swipeTimer != null)
  window.clearTimeout(el.swipeTimer);
 swipeArray[el.swipeIndex] = el;
 el.style.clip = "rect(-99999, 99999, 99999, -99999)";
 if (el.swipeCounter == null || el.swipeCounter == 0) {
  el.orgLeft  = el.offsetLeft;
  el.orgTop  = el.offsetTop;
  el.orgWidth = el.offsetWidth;
  el.orgHeight  = el.offsetHeight;
 }
 el.swipeCounter = steps;
 el.style.clip = "rect(0,0,0,0)";
 window.setTimeout("repeat(" + dir + "," + el.swipeIndex + "," + steps + "," + msec + ")", msec);
}
function repeat(dir, index, steps, msec) {
 el = swipeArray[index];
 var left   = el.orgLeft;
 var top    = el.orgTop;
 var width  = el.orgWidth;
 var height = el.orgHeight;
 if (el.swipeCounter == 0) {
  el.style.clip = "rect(-99999, 99999, 99999, -99999)";
  return;
 }
 else {
  el.swipeCounter--;
  el.style.visibility = "visible";
  switch (dir) {
   case 2:
    el.style.clip = "rect(" + height*el.swipeCounter/steps + "," + width + "," + height + "," + 0 + ")";
    el.style.top  = top - height*el.swipeCounter/steps;
    break;
   case 8:
    el.style.clip = "rect(" + 0 + "," + width + "," + height*(steps-el.swipeCounter)/steps + "," + 0 + ")";
    el.style.top  = top + height*el.swipeCounter/steps;
    break;
   case 6:
    el.style.clip = "rect(" + 0 + "," + width + "," + height + "," + width*(el.swipeCounter)/steps + ")";
    el.style.left  = left - width*el.swipeCounter/steps;
    break;
   case 4:
    el.style.clip = "rect(" + 0 + "," + width*(swipeSteps - el.swipeCounter)/steps + "," + height + "," + 0 + ")";
    el.style.left  = left + width*el.swipeCounter/steps;
    break;
  }
 
  el.swipeTimer = window.setTimeout("repeat(" + dir + "," + index + "," + steps + "," + msec + ")", msec);
 }
}
var mtmpleft="";
var mtmptop="";
function hideSwipe(el) {
 window.clearTimeout(el.swipeTimer);
 el.style.visibility = "hidden";
 el.style.clip = "rect(-99999, 99999, 99999, -99999)";
 el.swipeCounter = 0;
 if(mtmpleft!="")el.style.left = mtmpleft;
 if(mtmptop!="")el.style.top = mtmptop;
}

function stoperror(){
return true;
}
window.onerror=stoperror;
function mpopOut() {
mpopTimer = setTimeout('mallhide()', 500);
}
function getReal(el, type, value) {
 temp = el;
 while ((temp != null) && (temp.tagName != "BODY")) {
  if (eval("temp." + type) == value) {
   el = temp;
   return el;
  }
  temp = temp.parentElement;
 }
 return el;
}


function mMenuRegister(menu)
{
  mmenus[mmenus.length] = menu
  return (mmenus.length - 1)
}

function mMenuItem(caption,command,target,isline,statustxt,level,img,sizex,sizey,pos){
 this.items = new Array();
 this.caption=caption;
 this.command=command;
 this.target=target;
 this.isline=isline;
 this.statustxt=statustxt;
 if(level!=null){mnumberofsub++;
 this.hasc=mnumberofsub;}
 this.level=level;
 this.img=img;
 this.sizex=sizex;
 this.sizey=sizey;
 this.pos=pos;
}

已经玩php一段时间了,基本是from0开始的,经常出现的问题也很多,慢慢的可以熟练的查询文档了,而且,经验也不是很多。

  先lookhere。:

error_reporting(1048);//1,2,4,7,...,1048
ob_start();
session_start();
date_default_timezone_set('Asia/Shanghai');

  php的递给调用会吃掉很多的内存。

  一般的,不要太多的使用define。

  在类的构造和属性器方面,5已经做了很多的工作,克服的bug就不说了,__系列的函数都有一些看点,也是支持static的。

  按照我现在的写过的程序,很少用到框架页面的,我感觉在php里面速度不在是一个问题。

  注意类的调用次序,特别是已经extends的,准确的释放掉内存。

  @mysql_fetch_array($result,MYSQL_ASSOC);

  这个注意使用乱用,MYSQL_ASSOC,MYSQL_NUM和MYSQL_BOTH是一个enum吧。默认的是MYSQL_BOTH.

  mysql的语句,如果执行in的话不再支持limit。so...很麻烦。

  支持distinct,group之,程序循环执行,md。 

if(get_magic_quotes_gpc()){
  $_GET=    stripslashes_gpc($_GET);
  $_POST=  stripslashes_gpc($_POST);
  $_COOKIE=  stripslashes_gpc($_COOKIE);
}
  set_magic_quotes_runtime(0);#magic_quotes_runtime
functionstripslashes_gpc($array){
  while(list($key,$value)=each($array)){
    if(is_string($value)){
      $array[$key]=addslashes(stripslashes($value));
    }elseif(is_array($value)) {
      $array[$key]=stripslashes_gpc($value);
    }
  }
  return$array;
}
/**
*处理程序中出现的错误
*@Date:2006-10-9-10:51
*@param  (类型)  (参数名)  (描述)
*/
functionError_Handler($errno,$errstr,$errorfile,$errline,$errtext){

function Uploadfile(){
   //文件保存目录路径
   $save_path = '../upload/';
   //定义允许上传的文件扩展名
   $ext_arr = array('rar','zip');
   //最大文件大小
   $max_size = 1000000;
   //更改目录权限
   @mkdir($save_path, 0777);
   
   
   //有上传文件时
   if (empty($_FILES) === false) {
    //原文件名
    $file_name = $_FILES['fileData']['name'];
    //服务器上临时文件名
    $tmp_name = $_FILES['fileData']['tmp_name'];
    //文件大小
    $file_size = $_FILES['fileData']['size'];
    //检查目录
    if (@is_dir($save_path) === false) {
     alert("上传目录不存在。");
    }
    //检查目录写权限
    if (@is_writable($save_path) === false) {
     alert("上传目录没有写权限。");
    }
    //检查是否已上传
    if (@is_uploaded_file($tmp_name) === false) {
     alert("临时文件可能不是上传文件。");
    }
    //检查文件大小
    if ($file_size > $max_size) {
     alert("上传文件大小超过限制。");
    }
    //获得文件扩展名
    $temp_arr = explode(".", $file_name);
    $file_ext = array_pop($temp_arr);
    $file_ext = trim($file_ext);
    $file_ext = strtolower($file_ext);
    //检查扩展名
    if (in_array($file_ext, $ext_arr) === false) {
     alert("上传文件扩展名是不允许的扩展名。");
    }
    //移动文件
    if (move_uploaded_file($tmp_name, $file_path) === false) {
     alert("上传文件失败。");
    }
 } 


<?php
if($_FILES['file']['error'] > 0
){
   echo 
'!problem:'
;
   switch(
$_FILES['file']['error'
])
   {
     case 
1: echo '文件大小超过服务器限制'
;
             break;
     case 
2: echo '文件太大!'
;
             break;
     case 
3: echo '文件只加载了一部分!'
;
             break;
     case 
4: echo '文件加载失败!'
;
             break;
   }
   
   exit;
}
if(
$_FILES['file']['size'] > 1000000
){
   echo 
'文件过大!'
;
   exit;
}
if(
$_FILES['file']['type']!='image/jpeg' && $_FILES['file']['type']!='image/gif'
){
   echo 
'文件不是JPG或者GIF图片!'
;
   exit;
}
$today date("YmdHis"
);
$filetype $_FILES['file']['type'
];
if(
$filetype == 'image/jpeg'
){
  
$type '.jpg'
;
}
if(
$filetype == 'image/gif'
){
  
$type '.gif'
;
}
$upfile 'upfile/' $today $type
;
if(
is_uploaded_file($_FILES['file']['tmp_name'
]))
{
   if(!
move_uploaded_file($_FILES['file']['tmp_name'], $upfile
))
   {
     echo 
'移动文件失败!'
;
     exit;
    }
}
else
{
   echo 
'problem!'
;
   exit;
}
echo 
'<h1>success!</h1><br>'

echo 
'文件大小:' $_FILES['file']['size'] . '字节' '<Br>'
;
echo 
'文件路径:' $upfile
;
echo 
'<hr with="100%" />' '<p>'
;
$dirr 'upfile/'
;
$dir opendir($dirr
);
echo 
$dirr '--Listing:<ul>'
;
while(
$file readdir($dir
)){
  echo 
"<li>$file</li>"
;
}
echo 
'</ul>'
;
closedir($dir
);
?>

[!--infotagslink--]

相关文章

  • ps动态环绕动画效果怎么制作

    ps动态环绕动画效果是现在很多人都非常喜欢的,大多数人还不知道ps动态环绕动画效果怎么制作下面文章就给大家介绍下ps怎么制作科技感十足的动态环绕动画效果,一起来看看...2017-07-06
  • vue 实现动态路由的方法

    这篇文章主要介绍了vue 实现动态路由的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-06
  • Vue实现动态查询规则生成组件

    今天我们来给大家介绍下在Vue开发中我们经常会碰到的一种需求场景,本文主要介绍了Vue动态查询规则生成组件,需要的朋友们下面随着小编来一起学习学习吧...2021-05-27
  • jQuery动态添加与删除tr行实例代码

    最近由于项目的需要,需要动态的添加和删除table中的tr,感觉用JS可以实现,但是在网上找了一下,单纯的自己写JS,感觉太麻烦,而且也不好维护。于是想到了最近学的jQuery。这篇文章给大家用实例介绍了jQuery动态添加与删除tr行的方法,有需要的朋友们可以参考借鉴。...2016-10-20
  • C#中动态显示当前系统时间的实例方法

    想在网页中动态地显示当前系统的时间,找了好多,不过都是一些停在那里不动的。。。不过皇天不负有心人,终于让我找到了...2020-06-25
  • c#动态调用Webservice的两种方法实例

    这篇文章介绍了c#动态调用Webservice的两种方法实例,有需要的朋友可以参考一下...2020-06-25
  • SQL Server中执行动态SQL

    本文详细讲解了SQLServer中执行动态SQL的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2022-05-19
  • jQuery为动态生成的select元素添加事件的方法

    下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
  • C#实现动态显示及动态移除图片方法

    这篇文章主要介绍了C#实现动态显示及动态移除图片方法,对于C#的初学者了解图像操作有一定的帮助,需要的朋友可以参考下...2020-06-25
  • 用C++面向对象的方式动态加载so的方法

    下面小编就为大家带来一篇用C++面向对象的方式动态加载so的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
  • C# 如何解析获取Url参数值

    这篇文章主要介绍了C# 如何解析获取Url参数值,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-09-01
  • vue2 中如何实现动态表单增删改查实例

    本篇文章主要介绍了vue2 中如何实现动态表单增删改查实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...2017-06-15
  • 使用JavaScript获取URL中的参数(两种方法)

    这篇文章主要介绍了使用JavaScript获取URL中的参数(两种方法)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-11-22
  • Springboot使用thymeleaf动态模板实现刷新

    这篇文章主要介绍了Springboot使用thymeleaf动态模板实现刷新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-31
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • C#中静态的深入理解

    这篇文章详细的介绍了C#中的静态,有需要的朋友可以参考一下...2020-06-25
  • node.js如何根据URL返回指定的图片详解

    这篇文章主要介绍了NODE.JS如何根据URL返回指定的图片详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-21
  • c#动态改变webservice的url访问地址

    这篇文章主要介绍了c#动态改变webservice的url访问地址,需要的朋友可以参考下...2020-06-25
  • mybatis动态sql实现逻辑代码详解

    mybatis通过将sql配置xml文件中,通过解析xml动态标签来实现动态sql,本文以xml文件为例给大家介绍mybatis动态sql的实现代码,感兴趣的朋友一起看看吧...2021-08-14
  • 浅析C#中静态方法和非静态方法的区别

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向大家介绍下C#中静态方法和非静态方法的区别,一起看看吧...2020-06-25