最近將代碼作了遷移,更換了web服務器,從原來的Nginx,換成使用Apache,多少有些區別。這裏整理一下在apache下實現rewrite功能。php
第一部分:修改apache配置文件支持rewritehtml
一、apache加載rewrite模塊linux
LoadModule rewrite_module modules/mod_rewrite.so
二、支持Options FollowSymLinks web
在以前配置將本來的Options FollowSymLinks修改成Options None是爲了不列出apache的目錄。apache
<Directory "/data1/wap/htdocs/stat"> Options FollowSymLinks #Options None AllowOverride All Order allow,deny Allow from all </Directory>
在配置實現rewrite中,若是不使用Options FollowSymLinks,在查看錯誤日誌,會發現報以下錯誤
Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden瀏覽器
三、配置rewrite服務器
a、在linux文件目錄下生成.htaccess文件配置rewrite, 以下 app
RewriteEngine on RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^/(.*) $1.php RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) /index.php
b、修改apache配置文件,配置rewrite規則
ide
四、調試rewrite配置的辦法spa
在配置文件增長以下配置,便可查看rewrite日誌
RewriteLog "/data1/rewrite.log" RewriteLogLevel 9
修改apache的配置文件須要重啓一下web服務,重啓後,若是採用.htaccess文件修改規則的方式。在修改.htaccess文件無需重啓web服務
第二部分: rewrite配置規則總結
一、Apache Rewrite規則修正符
1) R 強制外部重定向
2) F 禁用URL,返回403HTTP狀態碼。
3) G 強制URL爲GONE,返回410HTTP狀態碼。
4) P 強制使用代理轉發。
5) L 代表當前規則是最後一條規則,中止分析之後規則的重寫。
6) N 從新從第一條規則開始運行重寫過程。
7) C 與下一條規則關聯
若是規則匹配則正常處理,如下修正符無效
8) T=MIME-type(force MIME type) 強制MIME類型
9) NS 只用於不是內部子請求
10) NC 不區分大小寫
11) QSA 追加請求字符串
12) NE 不在輸出轉義特殊字符 \%3d$1 等價於 =$1
二、RewriteCond標誌符
作判斷使用,例如 RewriteCond %{REQUEST_FILENAME} -f 判斷文件是否存在
三、RewriteRule標誌符
執行跳轉的準則
四、環境變量
環境變量名稱 |
示例 |
HTTP_USER_AGENT |
|
HTTP_REFERER |
|
HTTP_COOKIE |
|
HTTP_FORWARDED |
|
HTTP_HOST |
|
HTTP_PROXY_CONNECTION |
|
HTTP_ACCEPT |
|
DOCUMENT_ROOT |
|
SERVER_ADMIN |
|
SERVER_NAME |
|
SERVER_ADDR |
|
SERVER_PORT |
|
SERVER_PROTOCOL |
HTTP/1.1 |
SERVER_SOFTWARE |
Apache/2.2.11 (Win32) PHP/5.2.9-1 |
|
|
REMOTE_ADDR |
正在瀏覽當前頁面用戶的 IP 地址 |
REMOTE_HOST |
正在瀏覽當前頁面用戶的主機名。反向域名解析基於該用戶的 REMOTE_ADDR |
REMOTE_PORT |
用戶鏈接到服務器時所使用的端口 |
REMOTE_USER |
|
REMOTE_IDENT |
|
REQUEST_METHOD |
|
SCRIPT_FILENAME |
/webRoot/t/share77.html |
PATH_INFO |
|
QUERY_STRING |
|
AUTH_TYPE |
|
|
|
TIME_YEAR |
|
TIME_MON |
|
TIME_DAY |
服務器獲取當前的日值 |
TIME_HOUR |
|
TIME_SEC |
服務器獲取當前時間的秒 |
TIME_MIN |
|
TIME |
服務器獲取當前的時間, 格式爲: 年月日時分秒 |
|
|
API_VERSION |
apache 的 API 版本信息 |
REQUEST_URI |
瀏覽器請求的資源信息. |
REQUEST_FILENAME |
被請求的資源的在磁盤的物理地址 |
IS_SUBREQ |
若是是 sub-request 則顯示爲 true, 不然爲 false. |