Apache的Mode Rewrite模塊提供了一個基于正則表達式分析器的重寫引擎來實時重寫URL請求。在大多數情況下,它和.htaccess文件配合使用。就是說,.htaccess文件的一個主要功能是用來重寫URL請求,那么在本小節里,我們來看看如何實現重寫。
mod_rewrite
實現所有這些神奇功能的模塊叫做mod_rewrite,請確保你的服務器安裝并啟用了該模塊:
sudo a2enmod rewrite
我們一般會把所有涉及URL重寫或者重定向的代碼這樣放置:
# Turn on rewrite engine
Options +FollowSymlinks
RewriteEngine on
# More rules below
...
開啟 httpd.conf 的 rewrite
在[Apache安裝目錄]/conf/httpd.conf中找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉前面的注釋符號#。如果沒有這行,請添加。并確認apache安裝目錄下的modules文件夾中是否有mod_rewrite.so這個文件。這樣就啟用了Mod Rewrite功能。
在[Apache安裝目錄]/conf/httpd.conf中找到
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
把“AllowOverride None”改成“AllowOverride All”,這樣所有的文件夾都支持.htaccess了,或者針對指定的文件夾啟用.htaccess,可以在[Apache安裝目錄]/conf/httpd.conf中加入
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
這種做法一般是和虛擬主機配置在一起的,所以大多數會把上述配置代碼寫入[Apache安裝目錄]/conf/extra/httpd-vhost.conf中,這樣比較清晰易于管理。
開啟了 Apache 的 rewrite 功能后,就可以使用 .htaccess 來進行重寫了。關于 mod_rewrite 大概就談到這里,下面是一些我們需要注意的地方:
FollowSymlinks必須啟用,這是rewrite引擎的安全需求。
通常FollowSymlinks在Apache的主配置文件中就已經啟用了,所以通常可以省略。
RewriteEngine命令用于啟用rewrite引擎
IfModule命令用于判斷Apache是否安裝了mod_rewrite模塊,之后筆者會省略該命令,但不代表這是個好習慣。
mod_rewrite會處理所有提交給Apache的URL請求,并與之后的規則進行匹配