从apache迁移到nginx

时间:2015-10-12 11:26:21

标签: apache .htaccess nginx

所以我一直在为所有PHP项目使用apache,但现在我被迫在服务器上使用nginx。我不知道如何用nginx做漂亮的网址。所以我开始将我的.htaccess文件转换为nginx配置脚本,并尝试修改nginx配置文件,但没有运气。

这是我的 .htaccess 文件:

Options -MultiViews
RewriteEngine On

RewriteBase /wallfly-mvc/public
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

这是我的 nginx.conf 服务器块:

server {
    listen 80; listen [::]:80;
    server_name  deco3801-superflyz.uqcloud.net;
    root         /var/www/htdocs;

    include "set_cookie.conf";
    rewrite_by_lua_file "etc/nginx/lua/auth_filter.lua";

    location / {
        index  index.html index.htm index.php index.jsp index.aspx;
        try_files $uri $uri/ =404;
    }

    location /wallfly-mvc/public/ {
        if (!-e $request_filename) {
            rewrite ^/wallfly-mvc/public/(.+)$ /wallfly-mvc/public/index.php?url=$1 break;
        }
    }
}

我希望每个请求都指向 public / index.php 。这是我的项目结构

wallfly-mvc/
  app/
  public/
    index.php
    css/
    js/
    img/

我应该如何更改nginx.conf文件?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用location ^~来捕获目录。它的优先级更高location /

server {
    #...

    location ^~ /wallfly-mvc/public/ {
        if (!-e $request_filename) {
            rewrite ^/wallfly-mvc/public/(.+)$ /wallfly-mvc/public/index.php?url=$1 break;
        }
    }
}