.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]{1,})-([0-9]{1,}).html$ b.php?action=$1&id=$2
RewriteRule ([a-zA-Z1-9]{1,})/([a-zA-Z1-9]{1,})$ a.php?controller=$1&action=$2
RewriteRule MyController/[a-zA-Z1-9]$ MyController.php?action=$1
ErrorDocument 404 /404.txt
網上找了一篇文件http://roshanbh.com.np/2008/03/url-rewriting-examples-htaccess.html例舉了常用的5種映射,也可以參考。
product.php?id=12 to product-12.html
RewriteEngine on
RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1
Rewriting product.php?id=12 to product/ipod-nano/12.html
RewriteEngine on
RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2
Redirecting non www URL to www URL
RewriteEngine On
RewriteCond %{HTTP_HOST} ^optimaxwebsolutions\.com$
RewriteRule (.*) http://www.optimaxwebsolutions.com/$1 [R=301,L]
Rewriting yoursite.com/user.php?username=xyz to yoursite.com/xyz
RewriteEngine ?On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1
Redirecting the domain to a new subfolder of inside public_html.
RewriteEngine ?On
RewriteCond %{HTTP_HOST} ^test\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{REQUEST_URI} !^/new/
RewriteRule (.*) /new/$1
示例:
.htaccess文件內容如下
RewriteEngine on ? ? ? ? ? ? ? ? ? ? ? //on為打開,off為關閉
RewriteRule ^([a-zA-Z1-9]{1,})/([a-zA-Z1-9]{1,})$ a.php?controller=$1&action=$2
RewriteRule ^([a-zA-Z1-9]{1,})/([a-zA-Z1-9]{1,})/$ a.php?controller=$1&action=$2
說明:
正則表達式,嚴格匹配類似Controller/Action或者Controller/Action/,映射到a.php
a.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,也是可以的。
參考文檔:
http://www.htaccess-guide.com/
http://corz.org/serv/tricks/htaccess.php
http://roshanbh.com.np/2008/03/url-rewriting-examples-htaccess.html