這是一個由apache多站點配置引發的"血案",本以為是本地多站點配置的問題,結果找了半天沒找到相關配置,最后還是問的大腿,同時也了解一些關於c盤hosts文件的映射作用以及使用 ip訪問 在多域名的情況下,會訪問首先生效的域名。
主要的還是路由設置,說一下我發現這個問題的過程。
項目是phpcms的,有手機站和pc站,還有ecmall,因為域名不同,所以要配置本極apache服務器多站點,打開各自的主頁。
修改本機hosts文件,修改apapche 服務器 httpd, httpd-vhosts文件 ,在httpd-vhosts里添加了相應站點的訪問路徑。
然后重啟apache 。因為pc站的域名配置了相應的訪問路徑,沒有問題,正常顯示,但是手機站在httpd-vhosts里沒有配置訪問路徑,也可以正常訪問,當時我就震驚了。
效果是這樣的:
hosts文件:
httpd-vhosts文件:
訪問路徑只配置了www.cms.localhost ,並沒有配置wap.cms.localhost 為什么他還能正常訪問到手機站呢? 我以為漏掉了什么,就百度啊百度啊,找配置啊找配置(整個過程很艱辛)然后還是沒有發現原因,接着就去抱大腿了,害羞(✿◡‿◡)。
大腿告訴我 如下內容:
1.hosts: hosts只負責映射,映射成功即可訪問,並不驗證被映射地址的真假。
2.使用IP訪問,多域名情況下,會訪問首先生效的域名。
然后我百度了一下,了解了hosts,然后問大腿,我用的域名訪問,經過hosts 會被解析成127.0.0.1 ,在多域名的情況下,不應該訪問 我在apache多站點配置文件httpd-vhosts里配置的第一個域名對應的路徑嗎,大腿說是的。但是實際上是訪問的手機站,然后重點來了:大腿說看看route.php 也就是phpcms的caches/configs/route.php 這個是phpcms 的路由配置默認訪問路徑文件。
在這里面
返回的數組中有了如上配置。然后在phpcms/libs/classes中的param.calss.php 這個類中進行了路由的參數處理:
//路由配置 private $route_config = ''; public function __construct() { if(!get_magic_quotes_gpc()) { $_POST = new_addslashes($_POST); $_GET = new_addslashes($_GET); $_REQUEST = new_addslashes($_REQUEST); $_COOKIE = new_addslashes($_COOKIE); } // 載入route.php中的配置信息, 通過當前地址欄的url進行對比,然后進行一系列處理,最終 $_GET 中包含了當前地址欄里的url對應的訪問路徑。
// 這里的SITE_URL 就是你在地址欄里輸入的url $this->route_config = pc_base::load_config('route', SITE_URL) ? pc_base::load_config('route', SITE_URL) : pc_base::load_config('route', 'default'); // var_dump($this->route_config); //結果是route.php里相關的數組元素
if(isset($this->route_config['data']['POST']) && is_array($this->route_config['data']['POST'])) { foreach($this->route_config['data']['POST'] as $_key => $_value) { if(!isset($_POST[$_key])) $_POST[$_key] = $_value; } } if(isset($this->route_config['data']['GET']) && is_array($this->route_config['data']['GET'])) { foreach($this->route_config['data']['GET'] as $_key => $_value) { if(!isset($_GET[$_key])) $_GET[$_key] = $_value; } } if(isset($_GET['page'])) { $_GET['page'] = max(intval($_GET['page']),1); $_GET['page'] = min($_GET['page'],1000000000); }
// var_dump($_GET);exit; 這里打印出的結果就是要前往的url路徑 return true; }
至於后來怎么跳轉的,就沒有再看,然后自己添加了一個mob.cms.localhost也可以正常訪問手機站,到這里為什沒回找到手機站的問題就解決了。
總結了一下:並不是所有的問題都出在自己的設置上,有時候應該自信一點,當初我怎么就沒有在整個項目里直接搜 wap.cms.localhost呢 我竟然搜索的http://wap.cms.localhost 捂臉哭(┬_┬)
還是自己對框架不熟悉,需要在以后的需求中不斷的實踐,如果不是閑來無事重新配置這個,我還真不知道這個路由配置。
最后一點,抱着大腿,才能更快,更快樂的成長。手動開心♪(^∀^●)ノ 大腿人特別好,性格脾氣都好,以后有能力了就去找大腿,還是跟着大腿混,嘿嘿嘿......