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

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

伪静态简介:html

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

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

公司案例:web

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

   

1、案例分析:数据库

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

 

2、web服务的迁移vim

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

 个人一个虚拟主机配置以下,固然啦域名,我改了

 1.png

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

   问题出现

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

2.png

通过一波三折,我才了解到,出现这种状况是网站的页面跳转异常,由于该页面不存在,才出现这个404错误;因此这就是一个伪静态配置问题。而这个伪静态须要咱们在nginx文件配置。

处理思路

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

 

伪静态处理:

首先咱们须要找到 .htaccessd  而后,咱们在webwww.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/

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

3.png

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

4、总结

   我的来讲,因为不熟悉伪静态的概念,为了处理这个问题,找了不少方法,也尝试各类匹配,虽然用时比较久,可是可幸的是,问题已经解决了;获益良多。文章出自 51-xiaozhagn

相关文章
相关标签/搜索