WordPress是一個非常流行的Blog系統,它可以利用Apache的mod_rewrite來實現URL的靜態化。安裝好的WordPress在配置了持久鏈接之后,會在網站的根目錄下(如果可寫)生成一個.htaccess文件,這個文件可以指示Apache如何進行URL重寫(如果服務器配置為允許使用htaccess的指令的話),它的內容如下:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] # END WordPress
這個文件的意思就是,如果當請求的文件不存在,那么把請求內部重定向到/index.php。WordPress會自己分析請求的URL,來判斷顯示哪個頁面。 在上次配置了Nginx+PHP之后,由于Nginx不支持Apache的.htaccess文件,要實現持久連接靜態化,我們必須手工配置Nginx的文件。首先找到Nginx的配置文件,默認編譯后的配置文件在/usr/local/nginx/conf/nginx.conf;Ubuntu通過包安裝的配置文件位于/etc/nginx/nginx.conf,也可以編輯vhost的配置文件,放在了/etc/nginx/sites-available下。 以下是基本的配置(Ubuntu下的范例):
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
location ~ .*\.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
還可以有很多種不同配置方式,例如不改寫所有包含wp-的url等。此配置考慮了目錄下的索引文件index.html和index.php。-f指令表示測試文件是否存在(不考慮文件和目錄的區別),!-f則表示不存在。注意在重寫url到index.html后面有個break,而重寫到index.php后沒有break。因為html文件不需要任何額外工作可以直接發送到客戶端,所以重寫規則在這里終止,下面就直接讓nginx發送文件。而.php文件需要進一步發送到fastcgi進程來運行,Nginx會繼續判斷該文件符合第二個部分location ~ .*\.php$的規則,并進行FastCGI的轉發。 大家可以將以上內容保存為wordpress.conf,然后在自己的vhost配置,即server節中應用該配置文件,例如(以下為Ubuntu進行的配置):
listen 80;
server_name eee-eee.com *.eee-eee.com; root /var/www/eee-eee.com; include /etc/nginx/wordpress.conf;
}
接下來讓Nginx重新載入配置文件,便可使用WordPress的持久鏈接了。





