将apache htaccess转换为nginx

时间:2015-03-18 09:23:59

标签: apache .htaccess nginx

我正在尝试将apache htaccess规则转换为nginx配置,但它无法正常工作。以下是规则和nginx配置的详细信息:

.htaccess规则

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php/$1 [L]

上面的Nginx配置

server {

    listen      ip_address:80;

    server_name  www.example.com;

    access_log /var/log/nginx/example.com-access.log;

    error_log /var/log/nginx/example.com-error.log;

    root   /var/www/html/example.com/;

    index  index.php;

location / {

                if (!-e $request_filename){

                rewrite ^(.*)$ /index.php/$1 break;

}

}

当我访问网站时,它会打开主页,当我点击其他菜单时,它会找不到404。

以下是错误日志:

2015/03/18 05:31:56 [error] 3550#0: *7 open() "/var/www/html/example/index.php//contents.html" failed (20: Not a directory), client:

1.2.3.4, server: www.example.com, request: "GET /contents.html HTTP/1.1", host: "www.example.com", referrer: "http://example.com/"

任何想法???

邻省..

2 个答案:

答案 0 :(得分:0)

你的nginx重写是错误的 - 因为最后的斜线,nginx认为index.php是一个文件夹。你可以这样做:

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

然后在你的PHP代码中解析$ _REQUEST [' url']

另一种可能性,许多网站管理员都是这样做的:

location / {
        try_files $uri $uri/ /index.php?$args;
}

含义 - 尝试先打开一个文件(如果存在),尝试打开一个文件夹(如果存在),最后的手段 - 将其传递给index.php。 $ args将包含查询字符串,您可以通过$ _SERVER访问原始URL。

答案 1 :(得分:0)

问题已经解决,我们在网站的config.php文件

中启用了以下功能

$config['index_page'] = ''; $config['uri_protocol'] = 'REQUEST_URI';

和nginx配置如下,

location / { try_files $uri $uri/ /index.php?$args; }

它有效......

感谢@Denis和@SuddenHead的回复。