Nginx下WordPress的Rewrite

最近接觸WP Super Cache,該插件要求固定連接必須是重寫的,故用到Rewrite。php

個人是這樣配置的:css

/usr/local/nginx/conf/rewrite/wordpress.confhtml

location / {
    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;
    }
}

而後在虛擬主機文件裏添加linux

include /usr/local/nginx/conf/rewrite/wordpress.conf;

便可。nginx

完整的vhost的配置文件:wordpress

server {
    listen       80;
    server_name  me.52fhy.com;
    index index.php index.html index.htm;
    root /52fhy.com/wordpress/;
    
    location / {
        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|php5)?$
    {
            #fastcgi_pass  unix:/tmp/php-cgi.sock;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 30d;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires 1h;
    }

    access_log  /www/log/me.52fhy.com.log;
}
  • 2015-12-18 11:42:24更新:
    以上rewrite方法致使後臺不少菜單沒法訪問,現更新。緣由是:
location / {
    #1
    if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
    }
    
    #2
    if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
    }
    #3
    if (!-f $request_filename){
        rewrite (.*) /index.php;
    }
}

對於後臺http://me.52fhy.com/wp-admin/options-writing.php這種連接將直接匹配#3,實際上這時候不須要任何匹配。故可在#2前添加.net

if (-f $request_filename){
    break;
}

或者所有更新更新爲:插件

location / {
    index index.html index.php;
    if (-f $request_filename) {
              break;
    }
    if (!-e $request_filename) {
              rewrite . /index.php  last;
    }
}

另外,在Apache下,利用mod_rewrite來實現URL的靜態化。unix

.htaccess的內容以下:code

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

參考:
一、Nginx下WordPress的Rewrite - 平凡的世界
http://www.ccvita.com/336.html
二、wordpress後臺訪問時沒有wp-admin報404錯誤 | 技術部
http://www.jishubu.net/yunwei/linuxyunwei/420.html

相關文章
相關標籤/搜索