php域名301转向程序代码

 更新时间:2016年11月25日 17:22  点击:1508
php中页面301跳转我们使用header()函数发送状态代码301的同时再跳转到指定页面了,实现的方法非常的简单。

注意:

301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:
301 redirect: 301 代表永久性转移(Permanently Moved),
302 redirect: 302 代表暂时性转移(Temporarily Moved ),

例子

在php中正常的临时跳转通常使用:
 

 代码如下 复制代码
<?php
 header("Location:your_dest_url");
?>

最简单的做法

 代码如下 复制代码

$the_host = $_SERVER['HTTP_HOST'];//取得当前域名
if($the_host != 'noniu.com')//判断获取的这个域名是不是你想要的(即定向后的域名)
{
header("HTTP/1.1 301 Moved Permanently");//发出301头部
header("Location:111cn.net) //跳转到你希望的域名
exit();
}

这个还可以实现比如111cn.net 跳转到www.111cn.net 上,也就是让所有的页面都用带www的网址

 代码如下 复制代码

<?php
$the_host = $_SERVER['HTTP_HOST'];//取得当前域名
$the_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';//判断地址后面部分
$the_url = strtolower($the_url);//将英文字母转成小写
if($the_url=="/index.php")//判断是不是首页
{
$the_url="";//如果是首页,赋值为空
}
if($the_host !== 'www.111cn.net ')//如果域名不是带www的网址那么进行下面的301跳转
{
header('HTTP/1.1 301 Moved Permanently');//发出301头部
header('Location:http://www.111cn.net '.$the_url);//跳转到带www的网址
}
?>

7、Apache下301转向代码

新建.htaccess文件,输入下列内容(需要开启mod_rewrite):

1)将不带WWW的域名转向到带WWW的域名下

 代码如下 复制代码

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^lesishu.cn [NC]
RewriteRule ^(.*)$ http://www.111cn.net /$1 [L,R=301]

2)重定向到新域名

 代码如下 复制代码

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://www.111cn.net /$1 [L,R=301]

wordpres根目录301跳转

 代码如下 复制代码

# BEGIN WordPress
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^111cn.net  [NC]
RewriteRule ^(.*)$ http://www.111cn.net /$1 [L,R=301]
rewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
rewriteRule ^index.php$ http://www.111cn.net / [R=301,L]
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

测试

 

php域名301转向程序代码

分析:

php 301跳转代码只适合于全php页面或单页面做跳转了,apache/iis 301跳转适用于大量的网站域名301跳转了,他们两共同点都是实现301但两者各人有优点吧,大家自行根据自己情况选择吧。

今天写一个问答系统上线之后发现有很多人发连接了,由于业务部门要我们过滤掉网站地址了,下面我给大家分享一个提取字符串url地址函数

例子

 代码如下 复制代码

$postInfo['answer2'] ='可以的,商业贷款可摊还36%,公积金贷款可摊还16%|||可以先把账户里的余额提取出来用作首付,然后每个月贷款商业贷款可摊还36%,公积金贷款可摊还16%|||可以的,现在甲类公积金是摊还比例http://www.111cn.net是工资基数的34%|||啊啊啊啊啊啊啊啊是的|||可以摊还,甲类34%
';

preg_match_all("/http:[\/]{2}[a-z]+[.]{1}[a-z\d\-]+[.]{1}[a-z\d]*[\/]*[A-Za-z\d]*[\/]*[A-Za-z\d]*/",$postInfo['answer2'],$array2);

print_r($array2);
 
if(!empty($array2[0]))
{
 foreach ($array2[0] as $k=>$v){
  $postInfo['answer2'] = str_replace($array2[0][$k],'',$postInfo['answer2'] );
 }
}

结果就为

(
    [0] => Array
        (
            [0] => http://www.111cn.net
        )

)

下面来简单的介绍在php中get_meta_tags()、CURL与user-agent信息对比情况,如果你对于这篇文章有兴趣可进入参考学习。

get_meta_tags()函数用于抓取网页中<meta name="A" content="1"><meta name="B" content="2">形式的标签,并装入一维数组,name为元素下标,content为元素值,上例中的标签可以获得数组:array('A'=>'1', 'b'=>'2')。其他<meta>标签不处理,并且此函数只处理到</head>标签时截止,之后的<meta>也不再继续处理,不过<head>之前的<meta>还是会处理。

user-agent是浏览器在向服务器请求网页时,提交的不可见的头信息的一部分。头信息是一个数组,包含多个信息,比如本地缓存目录,cookies等,其中user-agent是浏览器类型申明,比如IE、Chrome、FF等。

今天在抓取一个网页的<meta>标签的时候,总是得到空值,但是直接查看网页源代码又是正常的,于是怀疑是否服务器设置了根据头信息来判断输出。先尝试使用get_meta_tags()来抓取一个本地的文件,然后这个本地文件将获取的头信息写入文件,结果如下(其中替换成了/,方便查看):

 代码如下 复制代码

array (
  'HTTP_HOST' => '192.168.30.205',
  'PATH' => 'C:/Program Files/Common Files/NetSarang;C:/Program Files/NVIDIA Corporation/PhysX/Common;C:/Program Files/Common Files/Microsoft Shared/Windows Live;C:/Program Files/Intel/iCLS Client/;C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;C:/Windows/System32/WindowsPowerShell/v1.0/;C:/Program Files/Intel/Intel(R) Management Engine Components/DAL;C:/Program Files/Intel/Intel(R) Management Engine Components/IPT;C:/Program Files/Intel/OpenCL SDK/2.0/bin/x86;C:/Program Files/Common Files/Thunder Network/KanKan/Codecs;C:/Program Files/QuickTime Alternative/QTSystem;C:/Program Files/Windows Live/Shared;C:/Program Files/QuickTime Alternative/QTSystem/; %JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;',
  'SystemRoot' => 'C:/Windows',
  'COMSPEC' => 'C:/Windows/system32/cmd.exe',
  'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',
  'WINDIR' => 'C:/Windows',
  'SERVER_SIGNATURE' => '',
  'SERVER_SOFTWARE' => 'Apache/2.2.11 (Win32) PHP/5.2.8',
  'SERVER_NAME' => '192.168.30.205',
  'SERVER_ADDR' => '192.168.30.205',
  'SERVER_PORT' => '80',
  'REMOTE_ADDR' => '192.168.30.205',
  'DOCUMENT_ROOT' => 'E:/wamp/www',
  'SERVER_ADMIN' => 'admin@admin.com',
  'SCRIPT_FILENAME' => 'E:/wamp/www/user-agent.php',
  'REMOTE_PORT' => '59479',
  'GATEWAY_INTERFACE' => 'CGI/1.1',
  'SERVER_PROTOCOL' => 'HTTP/1.0',
  'REQUEST_METHOD' => 'GET',
  'QUERY_STRING' => '',
  'REQUEST_URI' => '/user-agent.php',
  'SCRIPT_NAME' => '/user-agent.php',
  'PHP_SELF' => '/user-agent.php',
  'REQUEST_TIME' => 1400747529,
)

果然在数组中没有HTTP_USER_AGENT这个元素,apache在向另外一台服务器发送请求的时候是没有UA的。之后查了一下资料,get_meta_tags()函数没有伪造UA的能力,所以只能使用其他办法解决了。

后来使用CURL来获取,就获取到了网页,不过使用上稍微麻烦一点,首先伪造UA,获取之后在使用正则表达式分析<meta>
伪造办法:

 代码如下 复制代码

// 初始化一个 cURL
$curl = curl_init();

// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://localhost/user-agent.php');

// 设置是否将文件头输出到浏览器,0不输出
curl_setopt($curl, CURLOPT_HEADER, 0);

// 设置UA,这里是将浏览器的UA转发到服务器,也可以手动指定值
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

// 设置cURL 参数,要求结果返回到字符串中还是输出到屏幕上。0输出屏幕并返回操作结果的BOOL值,1返回字符串
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// 运行cURL,请求网页
$data = curl_exec($curl);

// 关闭URL请求
curl_close($curl);

// 处理获得的数据
var_dump($data);

json_encode()函数是一个在php中可以把数组转换成json格式的函数了,但json_encode函数对于英文是没有任何问题,如果碰到中文或编码有不致情况时会出现中文转换之后变空了,下面我就来从多方面来介绍php返回json数据应用与一些使用转换时的问题解决办法。

json_encode()函数用法。

echo json_encode(array('a'=>'bbbb','c'=>'ddddd');

这样就会生成一个标准的json格式的数据

 代码如下 复制代码

<?php

//需要执行的SQL语句
//单条
$sql="select id,name from tbl_user where id=1";
//多条数据
//$sql="select id,name from tbl_user";

//调用conn.php文件进行数据库操作
require('Conn.php');

//提示操作成功信息,注意:$result存在于conn.php文件中,被调用出来
if($result)
{

// $array=mysql_fetch_array($result,MYSQL_ASSOC);
 
  
 /*数据集

 $users=array();
 $i=0;
 while($row=mysql_fetch_array($result,MYSQL_ASSOC)){

   echo $row['id'].'-----------'.$row['name'].'</br>';
   $users[$i]=$row;
   $i++;

 }
  echo json_encode(array('dataList'=>$users));

 */

 /*单条数据*/

 $row=mysql_fetch_row($result,MYSQL_ASSOC);
 
 echo json_encode(array('jsonObj'=>$row));
}

mysql_free_result($result);
//释放结果
mysql_close();
//关闭连接

?>

上面是数据库生成json数据了

单条数据:{"jsonObj":{"id":"1","name":"lmw"}}

多条数据:{"dataList":[{"id":"1","name":"lmw"},{"id":"2","name":"xxj"},{"id":"3","name":"xxxj"}]}


现在很多情况下,我们需要程序返回一个Json格式的结果,比如:

 代码如下 复制代码

{
"UserKeyGetResponse":
{"RequestName":"e99e6d63e8c712d7699f52978a","api_key_value":"41954dd9b1cb6a95802eab6810"},
"error_response":
{"code":"NO_ERROR","msg":"获取系统参数成功"}
}

可以将结果写成这样的数组形式:
$respon = array('UserKeyGetResponse' => array('RequestName' => $api_request_name, 'api_key_value' => $api_key_value),
'error_response' => array('code' => 'NO_ERROR', 'msg' => '获取系统参数成功'));

代码

 代码如下 复制代码

function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }
        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}

g:
$error_respon = array('code' => 'ERROR_MSG_MISS', 'msg' => '消息不存在');
echo JSON($array);

结果为:
{"code":"ERROR_MSG_MISS","msg":"消息不存在"}
客户端就可以解析这个结果了,当然错误码要用数字代替。

这样就好多了我们显示的直接是中文了,当然显示那个16进制的编码也是没有问题的哦。

我们知道php中有三个删除空格的函数trim() rtrim() ltrim() 但我测试之后发现这三个函数无法删除所有空格,那么我们要如何删除字符串所有空格?下面一起来看看。

我先是使用trim() rtrim() ltrim() 来删除空格

 代码如下 复制代码

<?php
echo trim(" 空 格 ")."<br>";
echo rtrim("空   格 ")."<br>";
echo ltrim(" 空格")."<br>";
?>

这样结果不是我们想要的中间空格无法删除,后来仔细查看了这三个函数的用法

trim() 去除一个字符串两端空格,
rtrim() 是去除一个字符串右部空格,
ltrim() 是去除一个字符串左部空格。

明白人看出没有删除中间空格的能力啊,那怎么办百度一下吧,人有说用正则替换函数,我们就试一下吧

看到有人这么说

 代码如下 复制代码

$str = ” This line contains\tliberal \r\n use of   whitespace.\n\n”;
$str = trim($str);// 首先去掉头尾空格
$str = preg_replace(’/\s(?=\s)/’, ‘’, $str);// 接着去掉两个空格以上的
$str = preg_replace(’/[\n\r\t]/’, ‘ ‘, $str);// 最后将非空格替换为一个空格

使用上面的例子可以去掉所有多余的空格,这样就搞写了哦。。

[!--infotagslink--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25