.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. 找到
<Directory />
Options FollowSymLinks ExecCGI Indexes
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
</Directory>
這個節點,把None改為All.<Directory />節點可能有多個,修改和PHP路徑相關的那個。
3. 重啟apache服務
接下來是建立.htaccess檔案,並在裡面寫配置。Windows中建立檔案的時候,不允許檔案只有尾碼,可以採用notepad等工具建立另存新檔該檔案名稱。
如果要實現URL重寫,設定檔中採用Regex是編寫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
說明:
Regex,嚴格匹配類似Controller/Action或者Controller/Action/,映射到a.php
a.php內容
<?php
echo "你的controller:".$_GET['controller']."<br>";
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