【发布时间】:2018-06-13 20:14:43
【问题描述】:
我使用 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;
}
我做错了什么?感谢并欢迎任何解决此问题的帮助。
更新: 我仍然需要这方面的帮助。我无法发布第一个为我工作的解决方案。
【问题讨论】:
标签: apache .htaccess mod-rewrite nginx url-rewriting