導航:首頁 > IDC知識 > thinkphp子域名路由

thinkphp子域名路由

發布時間:2021-02-25 17:42:08

1、thinkphp分組後url路由不起作用了怎麼辦

ThinkPHP URL 路由功能詳解與實例
本節內容導讀
本節內容主要介紹 ThinkPHP 路由功能與 U方法的使用,分為下面幾個部分:
ThinkPHP URL 路由功能詳解:
URL 路由就是允許你在一定規則下定製你需要的 URL 樣子,以達到美化 URL ,提高用戶體驗,也有益於搜索引擎收錄的目的。
例子
原本的 URL 為:
http://www.******.com/index.php/Procts/Show/category/5/id/123
該 URL 的本意是顯示第 5 分類中 id 為 123 的產品。經過 URL 路由改寫後 URL 可以為:
http://www.******.com/index.php/proct/5/123
如果使用 .htaccess 文件的 Rewrite 規則再把入口文件隱藏,則上面的 URL 可以進一步簡化為:
http://www.******.com/proct/5/123
這個 URL 地址就相對比較簡單易容。
提示:使用 Apache 的 URL Rewrite 規則也能達到 URL 定製的功能,在此就不展開了,感興趣的請參看 Apache Rewrite 相關的文章。
ThinkPHP URL 路由配置
在 ThinkPHP 中要使用 URL 路由功能,需要做如下配置:
在項目配置文件 Conf/config.php 裡面開啟路由功能(設置為 true):
'URL_ROUTER_ON' => true,
路由規則定義
與 2.x 版本不同,3.0 路由規則定義於項目配置文件 config.php 內,格式為數組格式,具體定義規則又分為規則路由和正則路由。規則路由語法如下:
格式1:'路由規則'=>'[分組/模塊/操作]?額外參數1=值1&額外參數2=值2...'
格式2:'路由規則'=>array('[分組/模塊/操作]','額外參數1=值1&額外參數2=值2...')
格式3:'路由規則'=>'外部地址'
格式4:'路由規則'=>array('外部地址','重定向代碼')
語法說明
路由規則即是我們要在 URL 中顯示出來規則,後面元素值部分是實際的 URL 地址及參數
路由規則中如果以 : 開頭,表示動態變數,否則為靜態地址
格式2的額外參數可以傳入數組或者字元串
路由規則支持變數的數字約束定義,例如:'proct/:id\d'=>'Procts/Show'
路由規則非數字變數支持排除,例如 'news/:cate^add|edit|delete'=>'News/category'
路由規則支持完整匹配定義,例如:'proct/:id\d$'=>'Procts/Show'
路由規則中的靜態地址部分不區分大小寫
外部地址中如果要引用動態變數, 採用 :1、:2 的方式
規則路由可以支持 全動態和動靜結合定義,例如 ':user/blog/:id'=>'Home/Blog/user'
這些規則及語法說明比較晦澀難懂,下面會有實例來對照以便理解上述路由規則及語法說明。
如果在配置文件里定義了路由開啟功能,系統在執行 Dispatch 解析的時候,會判斷當前 URL 是否存在定義的路由名稱,如果有就會按照定義的路由規則來進行 URL 解析。
ThinkPHP URL 路由實例
以本文開始的例子為例,看該路由是如何定義的。在項目配置文件 Conf/config.php 里定義如下規則:
//路由定義
'URL_ROUTE_RULES'=> array(
'proct/:category\d/:id\d'=>'Procts/Show', //規則路由
),
當我們訪問如下這個地址的時候:
http://www.******.com/index.php/proct/5/123
會將該地址解析到 Procts 模塊的 Show 操作,並傳入 get 參數 category=5&id=123。
如果有額外的固定參數,如 status=1,可以定義路由:
'proct/:category\d/:id\d'=>'Procts/Show?status=1', //規則路由
也即匹配下面這個 URL 地址:
http://www.*****.com/index.php/proct/5/123/1
上面都是按格式1來定義的路由,在有額外參數的情況下,可以轉換為第2種定義格式:
'proct/:category\d/:id\d'=>array('Procts/Show','status=1')
上面的路由規則中 \d 表示只匹配數字,當不加此約束時,則可匹配所有字元,這也是默認情況。如果要嚴格約定傳入的參數格式,請使用正則路由定義規則。
路由格式:外部地址
對於路由格式 3 和格式 4,則是檢測到匹配的路由格式,則跳轉到外部地址,區別是格式 4 有重定向代碼,如 301 代表永久重定向。

2、thinkphp 怎樣動態配置路由,怎樣從資料庫調取數據來配置路由

用這個方法: Route::get('detail-<name>-<id>', 'proct/detail');
<name>和<id> 後台自己定義內容
例:域名回/detail-xxxx-23

xxxx 從資料庫調答取數據

3、thinkphp 配置路由

這種效果單憑用thinkphp的配置是實現不了的,要想實現首先應該考慮隱藏入口文件。

以下是幾種環境下的配置:

apache:

1.httpd.conf配置文件中載入了mod_rewrite.so模塊 //在APACHE裡面去配置

#LoadMole rewrite_mole moles/mod_rewrite.so把前面的警號去掉

2.AllowOverride None 講None改為 All //在APACHE裡面去配置
<Directory "D:/server/apache/cgi-bin">
AllowOverride none 改 AllowOverride ALL

Options None
Order allow,deny
Allow from all
</Directory>

3.確保URL_MODEL設置為2,

在項目的配置文件里加入

return Array(
// .....
'URL_MODEL' => '2',
// .....
);

4 .htaccess文件必須放到跟目錄下

這個文件裡面加:

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

補充:在windows下不能建立以點開頭的文件,你可以先隨便建立一個文件

然後在DOS在操作 rename xxxx.xxxx .htaccess

IIS環境:

如果你的伺服器環境支持ISAPI_Rewrite的話,可以配置httpd.ini文件,添加下面的內容:
RewriteRule (.*)$ /index\.php\?s=$1 [I]

在IIS的高版本下面可以配置web.Config,在中間添加rewrite節點:
<rewrite>
<rules>
<rule name="OrgPage" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(.*)$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>

Nginx環境:

在Nginx低版本中,是不支持PATHINFO的,但是可以通過在Nginx.conf中配置轉發規則實現:

location / { // …..省略部分代碼
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}

其實內部是轉發到了ThinkPHP提供的兼容模式的URL,利用這種方式,可以解決其他不支持PATHINFO的WEB伺服器環境。

如果你的ThinkPHP安裝在二級目錄,Nginx的偽靜態方法設置如下,其中youdomain是所在的目錄名稱。

location /youdomain/ {
if (!-e $request_filename){
rewrite ^/youdomain/(.*)$ /youdomain/index.php?s=$1 last;
}
}

4、thinkphp3.1 二級域名部署和各個二級域名的URL路由設置 ,配置文件怎麼寫?????

http://doc.thinkphp.cn/manual/sub_domain_deploy.html
ThinkPHP支持分組的二級域名部署,該功能可以使項目中的多個分組呈現為二級域名的形式,例如經過配置二級域名部署,可以把:
http://domain.com/index.php/Admin/或者http://domain.com/Admin/
變為 http://admin.domain.com/ 訪問方式。
先配置域名, 以 apache為例 , 配置如下:
#主域名
DocumentRoot D:\htdocs\www
ServerName domain.com
#子域名
DocumentRoot D:\htdocs\www
ServerName admin.domain.com
ServerAlias *.domain.com
然後配置host, 以windows為例編輯C:\WINDOWS\system32\drivers\etc\hosts 文件,增加下面兩行:
127.0.0.1 domain.com
127.0.0.1 admin.domain.com
接下來修改程序的配置文件config.php如下
'APP_GROUP_LIST' => 'Home,Test,Admin',
'DEFAULT_GROUP' =>'Home',
'APP_SUB_DOMAIN_DEPLOY'=>1, // 開啟子域名配置
/*子域名配置
*格式如: '子域名'=>array('分組名/[模塊名]','var1=a&var2=b');
*/
'APP_SUB_DOMAIN_RULES'=>array(
'admin'=>array('Admin/'), // admin域名指向Admin分組
'test'=>array('Test/'), // test域名指向Test分組
),

3

5、thinkphp如何綁定二級域名

先在根目錄創建一個手機目錄,名稱隨意,再創建一個手機模塊

手機目錄版裡面有個權新的index.php入口文件,內容如下

定義一個define綁定到手機模塊中,這樣就行了,至於頁面跳轉用js跳轉到:域名/mobile,或者直接綁定二級域名到根目錄下的mobile文件夾即可

6、thinkphp如何獲取二級域名前綴然後跳轉到其他的後綴

這個與框架無關,這只要獲取到訪問域名就可以判斷了

php中$_SERVER['SERVER_NAME']就可以訪問當前域名;

確定域名後用explode分離域名為數組獲取域名前綴就是為0的數組

7、什麼是thinkPHP路由,路由有什麼作用

thinkphp的路由可以讓你的URL地址更加簡潔和優雅,比如在沒有定義路由時的訪問url為回http://serverName/index.php/Home/News/read/id/8,在定義路由後可以通過答http://serverName/index.php/Home/new/8進行相同效果的訪問~

8、thinkphp3.1.2 重寫+路由下的url問題

1、用的是apache,請在項目根目錄中添加一個文件.htaccess,裡面的內容如下

<IfMole mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d 
  RewriteCond %{REQUEST_FILENAME} !-f 
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfMole>

並且在httpd.conf中,將

LoadMole rewrite_mole libexec/apache2/mod_rewrite.so

這一行內的注釋去掉。容

2、如果你的是nginx,在對應的server中添加

if (!-e $request_filename) {
                rewrite "^/(.*)$" /index.php last;
        }

 修改完成後,別忘記重啟服務

9、thinkphp3.1.3 開啟子域名部署後,如何對每個分組進行獨立路由?

如果只啟用m子域名,admin/xxx/xxx是可以正常用的。
如果有些地址不能訪問,添加路由規則即可
'URL_ROUTER_ON' => true,
'URL_ROUTE_RULES' => array();

與thinkphp子域名路由相關的知識