从小白进阶,三分钟教你如何编写伪静态实现网站页面响应 荐

栏目: 服务器 · Nginx · 发布时间: 7年前

  从小白进阶,三分钟教你如何编写伪静态实现网站页面响应

伪静态简介:

伪静态是相对真实静态来讲的。伪静态并不是真正的静态,实质上也是动态页面。伪静态有何作用:伪静态页面,其目的是为了更好的被搜索引擎收录而通过一定的规则,把动态页面的地址转换成以 htm html 结尾的地址,看起来是静态的,实际是依然是动态页面。

既然这样,那我们还为啥要采用伪静态来响应我们的页面呢。首先我们采用的伪静态最主要的目的是方便搜索引擎蜘蛛 (Spider) 来抓取网页上的相关内容;接着是因为在影响网站在搜索引擎的排名中,有很重要的一条是网页静态化,很多朋友在研究 SEO 的时候,因为有些技术原因,伪静态成了最大的门槛;最后不得不说的是,使用伪静态还能提高用户对网页的信任度。

公司案例:

因为公司的的服务器快过期了(性能不咋样),也不打算继续续费了,所以打算把服务器里面的 web 服务迁移到新的公司服务器上,在旧的服务器上,只有一个 web 的网站,而且是用 apache+php 架构的,现在转到新的服务器上,并使用 nginx+php 架构实现新的网站部署。费了几波周折之后总算是可以访问页面的,但是访问 index.php 的其他连接,发现直接出现 404 错误, No input file specified 的页面。

一、案例分析:

Web 服务迁移,首先我们想到的是域名配置, web 目录指向, php 端口指向。首先对于 web 的迁移,我们只要创建一个虚拟机就可以了,重新更改 web 项目的配置文件(如 .env conf.php 文件),比如 web 的新的路径,还有 mysql 的路径指定等等。 至于在 inde.php 的页面里面的跳转,出现的错误页面问题,我们可以想到的是页面跳转,而找不到的这个页面,导致出现页面访问不了,我们可以很快的发现问题的所在是 nginx 的伪静态问题了 。解决这个问题,我们就可以完成了,整个网站的转移了。

二、 web 服务的迁移

1 、部署 lnmp 环境。

我这里使用 oneinstack 来安装的,很方便的一个键源码安装工具,工具使用可参考 参考官网: https://oneinstack.com/install/

2 、网站数据,数据库数据转移

1 )网站数据转移

首先这个需要,我们查看原来的 apache 的虚拟主机中所定义的,域名网站的目录指向哪里,然后把目录下的文件复制到新服务器的 /data/wwwroot ( 这里是使用 oneinstack 安装的所以 /data/wwwroot 默认定义为网站代码的路径 )

#scp  /var/www/abc  root@ 新主机的 ip:/data/wwwroot 

2) mysql 数据的转移

直接备份网站数据库的数据

#Mysqldump -uroot -ppassword  --databases  abc( 你网站所用的数据库名字 )  >  /tmp/database.sql

database.sql 复制到新服务器上

# scp  /tmp/database.sql  root@ 新主机的 ip:/tmp/ 

3) 、数据恢复,实现网站的 index ,访问。

我们到新的服务上,数据恢复

 #mysql –uroot –ppassword
 Mysql>source /tmp/database.sql

创建 web 连接 mysql 的用户

Mysql> GRANT  ALL  ON  www(web 的数据库 ).* TO 'www( 以前 web 的用户名 )'@'%' IDENTIFIED BY '123456';

4 )、修改 web 项目的定义文件,实现 index 页面的正常访问。

web 的项目中,会有一些 web 的定义文件,比如 confp.php. .env ,修改相关的参数就可以

接下来,创建个虚拟主机就可以。

#mkdir /use/local/nginx/config/vhost
#vim abc.com.conf

我的一个虚拟主机配置如下,当然啦域名,我改了

从小白进阶,三分钟教你如何编写伪静态实现网站页面响应 荐

三、伪静态规则编写,实现页面的正常跳转。

问题出现

当我访问页面的时候,很快就可以,访问到 index.php 的页面,于是我就想,网站搭建完毕了,准备收工了,基于好奇,看一下网页里面的内容啦,突然间,浏览器给我一个“惊喜 出现了一个 404 网页不存,这时一脸懵 B ,没有遇到这种情况的我,还是无从下手呢。

从小白进阶,三分钟教你如何编写伪静态实现网站页面响应 荐

经过一波三折,我才了解到,出现这种情况是网站的页面跳转异常,因为该页面不存在,才出现这个 404 错误;所以这就是一个 伪静态 配置问题。而这个伪静态需要我们在 nginx 文件配置。

处理思路

首先,出现这种情况,已经发现,该 web 项目是采用伪静态实现页面的跳转的。所以,我们就可以知道该 web 项目的有伪静态的配置,而一般来说都会把伪静态规则写的 .htaccessd 的文件里面 但是, nginx 是识别不了,而不能正常的跳转,接下来我们来一起看看,如何实现一步步伪静态编写,实现页面的正常访问吧。

伪静态处理:

首先我们需要找到 .htaccessd   然后,我们在 web www.acb.com.conf 的把文件指向该文件就可以了 .htaccessd 记录的该 web 项目的所有规则。

.htaccessd 是一个隐藏文件,一般是放在 web 项目的根目录下。

思路一

百度一下,看别人说,直接把 .htaccessd 文件 定义到虚拟主机就可以了。

进入虚拟主机:

#vim /usr/local/nginx/conf/vhost/ abc.com.conf

# server{} 下添加一个 location

location / {
            include /data/wwwroot/www.abc.com/pub_html/code/.htaccessd;
        }

重新加载 nginx

#service nginx reload

Redirecting to /bin/systemctl reload nginx.service

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

证明我们的这样写是不行的。

继续解决这个问题。

思路二

.htaccessd 文件的含有 RewriteRule 的内容复制到我们定义的 location 里面,并做修改。

查看一下原来的规则,我列出一小部分

RewriteRule ^tegory-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$                                                       tegory\.php\?id=$1&brand=$2&page=$3  [QSA,L]
RewriteRule ^tegory-([0-9]+)-b([0-9]+)(.*)\.html$                                                                tegory\.php\?id=$1&brand=$2  [QSA,L]
RewriteRule ^tegory-([0-9]+)(.*)\.html$                                                                          tegory\.php\?id=$1  [QSA,L]
RewriteRule ^ticle_cat-([0-9]+)-([0-9]+)(.*)\.html$                   ticle_cat\.php\?id=$1&page=$2   [QSA,L]
RewriteRule ^ticle_cat-([0-9]+)(.*)\.html$                           ticle_cat\.php\?id=$1   [QSA,L]

我们可以从上面的伪静态规则里面可以看到,有很多的正则,那我们该如何把这些伪静态规则复制到虚拟主机中,并做修改了。

首先我们要知道的是:

第一 nginx 配置文件,不支持 \ , 所复制过去的规则不应该存在 \ ,

第二 RewriteRule 不识别,只能识别 rewrite

第三 :所以匹配标题需要添加 / 来指定访问文件,比如 ^ticle_cat 重写后是这样 ^/ticle_cat

第四 :需要在结尾上加 last; 定义伪静态。

接下来,我们添加伪静态规则:

#vim /usr/local/nginx/conf/vhost/
abc.com.conf

# server{} 下添加一个 location

location / {
            rewrite ^/tegory-([0-9]+)-b([0-9]+)-([0-9]+)(.*).html$ /tegory.php?id=$1&brand=$2&page=$3 last;
rewrite ^/tegory-([0-9]+)-b([0-9]+)(.*).html$  /tegory.php?id=$1&brand=$2 last;
rewrite ^/tegory-([0-9]+)(.*).html$ /tegory.php?id=$1 last;
rewrite ^/ticle_cat-([0-9]+)(.*).html$ /ticle_cat.php?id=$1 last;
rewrite ^/ticle-([0-9]+)(.*).html$ /ticle.php?id=$1 last;
. . . . . . .
        }

重新加载 nginx

# service nginx reload

Redirecting to /bin/systemctl reload nginx.service

发现启动没问题:

重新访问页面,发现大部分都是可以访问成功,有一些还是不行。

思路三

为什么,还有一两个页面,还是访问不了,思考了一下原因,伪静态匹配的不正确。解决办法就是,找到那个页面的伪静态文件,重新匹配。

解决办法:

首先,找到伪静态不存在的页面,比如 www.abc.com/tegory-702-a0-bale.html 页面出错,我们改如何解决呢。

出现某个页面的跳转不正确,证明我们写的伪静态不对。

如果我们不太懂正则匹配,百度搜索:在线正则匹配就有了:或者这个 http://tool.oschina.net/regex/

我们把该对应的伪静态复制上去并匹配,

从小白进阶,三分钟教你如何编写伪静态实现网站页面响应 荐

接下来我们,把还有跳转不了的伪静态页面所对应的规则,一条一条在线匹配,就可以了。

四、总结

个人来说,由于不熟悉伪静态的概念,为了处理这个问题,找了很多方法,也尝试各种匹配,虽然用时比较久,但是可幸的是,问题已经解决了;获益良多。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Letting Go of the Words

Letting Go of the Words

Janice (Ginny) Redish / Morgan Kaufmann / 2007-06-11 / USD 49.95

"Redish has done her homework and created a thorough overview of the issues in writing for the Web. Ironically, I must recommend that you read her every word so that you can find out why your customer......一起来看看 《Letting Go of the Words》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具