WenRou's Blog
Wordpress伪静态规则(apache与nginx)
2015-3-29 温柔哥





一、Wordpress在apache下的伪静态规则:



<IfModule mod_rewrite.c>



RewriteEngine On RewriteBase /



RewriteRule ^index.php$ -[L]



RewriteCond %{REQUEST_FILENAME}!-f



RewriteCond %{REQUEST_FILENAME}!-d



RewriteRule . /index.php[L]



</IfModule>



这里意思其实很简单,把对所有访问index.php的文件重定向到当前根,当访问其它文件或者目录时,如果都不存在,所有请求都重定向到index.php,这样一来,我们可以访问网站上的已经存在的文件或目录,对于实际不存在的文件则交给index.php来处理。当请求交到index.php时,如果请求的是文档的固定链接,则可以查询数据库,返回文章,如果不是,则可以用index.php来生成更加友好的404页面,而不是服务器自带的404页面。



二、那么在nginx下怎么去设置wordpressd的伪静态呢?



 1、在相应nginx配置文件的server容器中添加下面的代码

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;

        }

}



例如:

       vi /usr/local/nginx/conf/nginx.conf    #编辑nginx配置文件



找到server_name localhost;后面一行添加上面的代码


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;
        }
}


:wq!   #保存配置文件



service nginx restart    #重启nginx

 

     2、 然后在WordPress后台-设置-固定链接



    后台选择系统提供的伪静态规则,或者自己规定一个把,比如



   -设置-固定链接-自定义结构,输入下面的代码,最后保存更改即可。

            /archives/%post_id%.html



3、重启nginx






 分析: 



     可以看到,nginx这样设置起来实际上是非常麻烦的,特别是当在一个站点下有多个wordpress目录时,需要对每个目录都单独设置,特别容易出错。如果对Nginx真的非常熟悉,就知道它有一个“try_files”指令,用来判断资源是否存在,用法如下:



1, try_files uri1 uri1 … urin



这里是逐个判断资源是否存在,有则返回,没有则继续找下一个资源



2,try_files uri1 uri2 … =404



这里是逐个判断资源是否存在,有则返回,没有则继续找下一个资源,如果都没有,则返回404



那么,实际上这个指令正好满足wordpress伪静态的需求:当访问一个资源时,首先查看它是否在服务器上存在,如果不存在,则查看相同名称的文件夹是否存在,如果都不存在,则交给wordpress的index.php处理。所以,最终我们只需要一句代码就可以实现wordpress的伪静态:



try_files $uri $uri/ /index.php;



也就是在conf文件中添加以下代码即可!!


location / {

    index index.php index.html index.htm;

    try_files $uri $uri/ /index.php?$args;

}






发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容