apache的rewrite機制
當我們使用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機制