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-