1. 程式人生 > >TP5路由規則無效,訪問任意地址皆為網站首頁的解決方案

TP5路由規則無效,訪問任意地址皆為網站首頁的解決方案

今天碰到一個有意思的事情,因為公司域名備案登出,導致網站無法訪問,備案需要10-20個工作日,但這幾天有急用必須能夠保證正常訪問,所以只好暫時找一個免備案的主機,並將網站遷移過去讓其正常訪問。

正好我的短網址伺服器支援解析香港線路,於是想到把兩邊的程式交換一下,自己的短網址使用公司的伺服器(因為自己的ex666.cn這個域名是已經備案了的),公司的網站程式使用我個人的短網址伺服器。

一切工作正常展開並且非常順利,但是把自己的短網址上傳完成之後,發現功能無法正常使用,開啟任意連結全部都是訪問的首頁,本想著仔細排查,但是公司人員因為需要急用電話問我相關進度,於是暫時放下去吧公司的網站上傳過去並解析到伺服器。

公司那邊網站上傳過去再將域名解析一遍,一路上還是非常順利,所以搞定了就吃飯去了。

晚上回來又繼續折騰自己短網址這邊的問題,因為第一次遇到,所以花了一點時間,搜尋了一下相關的問題卻並沒有找到解決方案,只找到一個和我遇到相同問題的開發者在TP官方社群提問,但並沒有得到解決。

一切還得靠自己,大概排查了一下程式碼、路由器定義以及配置項,並沒有發現有什麼端倪,畢竟在原主機上好好的,檔案也是照抄不誤直接遷移過來到新的伺服器上,因此問題只能大致確認在伺服器不同,一些細節上的功能支援也不同。

仔細看看官方給出的URL重寫規則如下:

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

用的PATHINFO解析,所以猜測可能是新的伺服器對PATHINFO的支援有關,官方配置項給出了PATHINFO的變數名配置項,用於相容模式,所以我首先在位址列嘗試了index.php?s=xxx,沒想到就可以正常訪問了,因此將.htaccess中的規則稍微修改如下:

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>

再次嘗試,問題完美解決~

所以這次的問題應該就是出在伺服器對PATHINFO的相容問題上,將重定向規則稍微修改一下改為相容模式就可以完美解決了。

記得在TP3的時候,URL模式是直接提供幾種固定的方式,其中相容模式以及PATHINFO兩種模式就在其中。

TP5相對來說更加靈活一些,相對於TP3固定只能選擇一種,TP5可以說是兩種模式共存了吧。