PHP實現url重寫和 htaccess

2021-09-03 10:26:16 字數 2822 閱讀 1701

.htaccess是乙個完整的檔名(只有字尾),它是用於apache伺服器下的配置檔案,當.htaccess檔案放在某一資料夾下,它僅對該資料夾下的檔案和資料夾有效。通過.htaccess檔案,可以配置伺服器實現很多功能,比如錯誤定位,密碼保護,ip拒絕,url重寫等等。

預設的apache不支援.htaccess,需要修改apache的配置檔案httpd.conf,才能使得.htaccess有效。

配置方法:

配置方面:

1. 找到apache的安裝目錄下的conf下的httpd.conf檔案,開啟檔案修改

loadmodule rewrite_module modules/mod_rewrite.so這行**,他前面有個#號,把#號刪掉

2.  找到

options followsymlinks execcgi indexes

allowoverride none

order deny,allow

deny from all

satisfy all

這個節點,把none改為all.節點可能有多個,修改和php路徑相關的那個。

3. 重啟apache服務

接下來是建立.htaccess檔案,並在裡面寫配置。windows中新建檔案的時候,不允許檔案只有字尾,可以採用notepad等工具新建另存為該檔名。

如果要實現url重寫,配置檔案中採用正規表示式是編寫url,並使之和常規的php檔案對映。常用的寫法如下:

rewriteengine on                       //on為開啟,off為關閉

rewriterule ([a-za-z])-([0-9]).html$ b.php?action=$1&id=$2

rewriterule ([a-za-z1-9])/([a-za-z1-9])$ a.php?controller=$1&action=$2

rewriterule mycontroller/[a-za-z1-9]$ mycontroller.php?action=$1

errordocument 404 /404.txt

網上找了一篇檔案例舉了常用的5種對映,也可以參考。

示例:

.htaccess檔案內容如下

rewriteengine on                       //on為開啟,off為關閉

rewriterule ^([a-za-z1-9])/([a-za-z1-9])$ a.php?controller=$1&action=$2

rewriterule ^([a-za-z1-9])/([a-za-z1-9])/$ a.php?controller=$1&action=$2

說明:

正規表示式,嚴格匹配類似controller/action或者controller/action/,對映到a.php

a.php內容

<?php

echo "你的controller:".$_get['controller']."

"; echo "你的action:".$_get['action'];

?>

輸入http://localhost:8080/controller/action/

則被解析到http://localhost:8080/a.php?controller=controller&action=action

這2個url是等價的。

注意,在對映url後加上查詢字串不影響正常的對映,比如輸入http://localhost:8080/controller/action/?value=100,也是可以的。

Nginx實現URL重寫

本文利用nginx實現url重寫,本文使用nginx與靜態頁面配合重寫url。結合本文場景,需要安裝nginx。url重寫是指將乙個url請求重新寫成 可以處理的另乙個url的過程。這樣說可能不是很好理解,舉個例子來說明一下,在開發中可能經常遇到這樣的需求,比如通過瀏覽器請求的http localh...

Nginx實現URL重寫

本文利用nginx實現url重寫,本文使用nginx與靜態頁面配合重寫url。結合本文場景,需要安裝nginx。1.1 關於linux系統安裝nginx可以參考我的文章 傳送門 url重寫是指將乙個url請求重新寫成 可以處理的另乙個url的過程。這樣說可能不是很好理解,舉個例子來說明一下,在開發中...

使用HttpHandler實現URL重寫

本文所講的是使用asp.net中的httphandler實現url重寫的,它所實現的原理請看這裡,本程式可以處理任何url,因為我在程式中使用了url過慮,只有訪問檔名是數字的才進行處理,並指在內部執行乙個新的頁面,並輸出資料,如下 當然你首先要做的是先建乙個類,並繼承自ihttphandler,然...