【问题标题】:converting apache htaccess to nginx将 apache htaccess 转换为 nginx
【发布时间】:2015-05-21 00:10:29
【问题描述】:

我正在尝试将 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/"

有什么想法???

少爷..

【问题讨论】:

  • /var/log/nginx/hostname.com-error.log 可以把问题说清楚
  • 我添加了错误日志

标签: apache .htaccess nginx


【解决方案1】:

你的 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。

【讨论】:

  • 感谢丹尼斯的回复。我之前使用过它,但它不适用于网站上的其他链接,并且日志文件中没有错误。和我现在的规则一样。主页工作正常,但是当我单击其他链接时它不起作用。
  • @Shoaib 你的链接是什么样的?你能举出1-2个例子吗?
  • 肯定喜欢,example.com(主页)example.com/members.html(实际网址目前显示在 apache 会员页面上)
  • @Shoaib 和您的 Apache 重写规则 (RewriteRule ^(.*)$ index.php/$1 [L]) 是否有效?实际上它不应该工作:)
  • 它正在工作。当我禁用该规则时,它给出了 404 未找到。我已经和开发人员谈过了,他说在这个网站上 router.php 文件完成了其余的重写。我们将一起挖掘问题。
【解决方案2】:

问题已解决,我们在网站的 config.php 文件中启用了以下功能,

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

和nginx配置如下,

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

成功了……

感谢@Denis 和@SuddenHead 的回复。

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 2021-11-26
    • 2020-12-23
    • 2020-09-22
    • 2012-02-25
    • 1970-01-01
    • 2016-08-31
    • 2018-07-10
    • 2017-08-02
    相关资源
    最近更新 更多