1. 程式人生 > >apache的rewrite機制

apache的rewrite機制

ride 引入 root htaccess cto 我會 win 一般來說 表達式

當我們使用thinkphp的時候,比如說我們訪問一個Test控制器的test方法,http://localhost/index.php/Test/test/1.html,那個這個1是用get方式傳遞的參數,假如這個參數為id,那麽我們其實訪問的真實地址是http://localhost/index.php/Test/test?id=1.html,用過thinkphp的都知道,其實這個就是偽靜態,通過配置tp配置文件的url模式可以實現,但是偽靜態的實現,其實也可以用apache的rewrite機制實現

apache的rewrite機制的實現:  

比如 http://www.test.com/test.php?type=music&id=100

希望上面的url 變成

http://www.test.com/test-music-id100.html

1.先啟用rewrite模塊

修改apache中conf目錄下httpd.conf文件,找到LoadModule rewrite_module modules/mod_rewrite.so並打開

2.配置虛擬域名

(1)打開apache中conf目錄下的vhosts.conf,並引入conf/extra/httpd-vhosts.conf,代碼如下

Include conf/extra/httpd-vhosts.conf

(2)修改httpd-vhost.conf文件,代碼如下

<VirtualHost *:80>

DocumentRoot "D:/phpstudy/www/test"

<Directory "D:/phpstudy/www/test">

</Directory>

</VirtualHost>

其中

DocumentRoot是網站根目錄

Directory配置節點,用於指定該目錄下的文件或是圖片.的訪問權限,也可以設置虛擬主機的錯誤頁面,歡迎頁面等

(3)在C:\Windows\System32\drivers\etc目錄下的hosts文件,設置ip和主機的對應關系,代碼如下

127.0.0.1 www.test.com

(4)訪問127.0.0.1 www.test.com/test.php

技術分享

配置成功!

3.配置rewrite機制

一般來說,httpd-vhost.conf文件是不能讓我們程序員隨便配置的,所以我們可以使用.htaccess文件進行配置

(1)修改httpd-vhost.conf文件,開啟用.htaccess文件去匹配規則,代碼如下

  allowoverride all

(2)在網站根目錄建立.htaccess文件,代碼如下

<IfModule rewrite_module>

#rewrite 模塊啟用

RewriteEngine On

#配置我們的rewrite規則

RewriteRule test-(\w+)-id(\d+)\.html$ test.php\?type=$1\&id=$2

</IfModule>

其中rewriteRule使用正則表達式來匹配的,匹配的部分是域名後面的字符串,也可以同時配置多個規則(RewriteRule)

(3)重啟apache並測試(註意,只是修改.htaccess是不需要重啟apache的)

php代碼

技術分享

測試結果

技術分享

關於Directory其實還有許多常用的配置的,因為這次主要是記錄偽靜態的實現,所以等下次有時間的話我會繼續整理一份關於Directory的常用配置

  

apache的rewrite機制