從小白進階,三分鐘教你如何編寫僞靜態實現網站頁面響應php
僞靜態簡介:html
僞靜態是相對真實靜態來說的。僞靜態並非真正的靜態,實質上也是動態頁面。僞靜態有何做用:僞靜態頁面,其目的是爲了更好的被搜索引擎收錄而經過必定的規則,把動態頁面的地址轉換成以htm或html結尾的地址,看起來是靜態的,實際是依然是動態頁面。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項目的配置文件(如.env、conf.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
個人一個虛擬主機配置以下,固然啦域名,我改了
3、僞靜態規則編寫,實現頁面的正常跳轉。
問題出現:
當我訪問頁面的時候,很快就能夠,訪問到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/
咱們把該對應的僞靜態複製上去並匹配,
接下來咱們,把還有跳轉不了的僞靜態頁面所對應的規則,一條一條在線匹配,就能夠了。
4、總結
我的來講,因爲不熟悉僞靜態的概念,爲了處理這個問題,找了不少方法,也嘗試各類匹配,雖然用時比較久,可是可幸的是,問題已經解決了;獲益良多。文章出自 51-xiaozhagn