Apache mod_rewrite 是 Apache HTTP Server 中的一個富強模塊,它容許你利用規矩來修改懇求的 URL,從而實現 URL 重寫、暗藏實在道路、創建友愛的 URL 等功能。以下將具體介紹 mod_rewrite 的設置跟利用方法,並經由過程現實案例停止剖析。
1. 檢測 mod_rewrite 能否啟用
在開端設置之前,起首須要確認你的 Apache 伺服器能否曾經啟用了 mod_rewrite 模塊。
1.1 利用 phpinfo()
經由過程 PHP 供給的 phpinfo()
函數可能檢查伺服器情況設置,包含已載入的 Apache 模塊。
<?php
phpinfo();
?>
在瀏覽器中拜訪此 PHP 文件,找到 “Loaded Modules” 部分,檢查能否包含 “mod_rewrite”。
1.2 編輯 httpd.conf 文件
假如不找到 “mod_rewrite”,則須要手動啟用該模塊。
- 打開 Apache 設置文件
httpd.conf
。 - 查找
LoadModule
指令,找到rewritemodule
相幹的設置。 - 將
#LoadModule rewritemodule modules/modrewrite.so
前面的#
號去掉落。
LoadModule rewritemodule modules/modrewrite.so
- 重啟 Apache 伺服器。
2. 設置 .htaccess 文件
為了讓 Apache 支撐目錄級其余設置,須要修改 httpd.conf
文件,並創建 .htaccess
文件。
2.1 修改 httpd.conf 文件
- 打開
httpd.conf
文件。 - 找到
<Directory />
段落。 - 將
AllowOverride None
修改為AllowOverride All
。
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
- 重啟 Apache 伺服器。
2.2 創建 .htaccess 文件
在須要設置 URL 重寫的目錄下創建 .htaccess
文件。
RewriteEngine On
3. 編寫 rewrite 規矩
3.1 RewriteEngine
啟用 rewrite 引擎。
RewriteEngine On
3.2 RewriteRule
定義 URL 重寫規矩。
RewriteRule ^oldpath/$ newpath/ [L]
^oldpath/$
:婚配以oldpath/
掃尾的道路。newpath/
:重寫後的道路。[L]
:結束進一步處理。
3.3 RewriteCond
定義 rewrite 規矩的前提。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
!-f
:文件不存在。!-d
:目錄不存在。
4. 實戰設置實例
4.1 實例 1:將靜態 URL 轉換為靜態 URL
RewriteEngine On
RewriteRule ^product/([a-zA-Z0-9]+)/$ product.php?id=$1 [L]
這個規矩將 /product/12345/
轉換為 /product.php?id=12345
。
4.2 實例 2:暗藏 .php 後綴
RewriteEngine On
RewriteRule ^(.*)\.html$ $1.php [L]
這個規矩將 .html
文件轉換為 .php
文件,比方 /index.html
轉換為 /index.php
。
5. 總結
經由過程以上介紹,信賴你曾經對 Apache mod_rewrite 有了一定的懂得。在現實利用中,可能根據須要編寫響應的 rewrite 規矩,實現 URL 重寫、暗藏實在道路等功能。