Nginx相当于Apache .htaccess

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx相当于Apache .htaccess相关的知识,希望对你有一定的参考价值。

我已经使用LEMP堆栈安装了一个php Web应用程序,我需要将一些Apache .htaccess重写规则移植到nginx等价物。

的.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?/$0 [PT,L]

我已尝试过其他Stackoverflow答案中推荐的这两项服务:

这是我的服务器块:

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES$
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/ssl/dhp-2048.pem;

    root /var/www/example;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name example.com;
#    return 302 https://example.com$request_uri;
    access_log  /var/log/nginx/example.access.log;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /.ht {
        deny all;
    }

}

第一个转换器生成了这个,我在最后一个花括号之前添加了一个附加位置节。语法检查nginx -t检出,但Nginx无法重启。

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

第二个转换器生成了一个不同的规则(下面),我在第一个位置节(在try_files下)添加了这个规则,但是由于Nginx不会重启,它也会破坏配置。

if (!-f $request_filename){
    set $rule_0 1$rule_0;
}
if (!-d $request_filename){
    set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
    rewrite /.* /index.php?/$0 last;
}

我究竟做错了什么?任何帮助解决这个问题表示赞赏和欢迎。

更新:我仍然需要帮助。我无法找到第一个为我工作的解决方案。

答案

=404语句中的try_files术语更改为/index.php?$uri

例如:

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

你的try_files声明只缺少最终的重写规则。请注意,nginx中的所有URI都包含一个领先的/。用$uri代替$0应该适合你。

有关更多信息,请参阅this document

以上是关于Nginx相当于Apache .htaccess的主要内容,如果未能解决你的问题,请参考以下文章

apache_conf React-Router browserHistory Apache .htaccess,来源:http://readystate4.com/2012/05/17/nginx-

如何在 Nginx 中使用 .htaccess 文件?

如何将我的 .htaccess 文件转换为 NGINX?

其他解决方案,而不是 NGINX 的 .htaccess

将 .htaccess 转换为 nginx (mod_rewrite)

.htaccess-SetEnvIf 到 NGinx-fastcgi_param 的转换