我的问题看似微不足道,但经过几个小时的测试、研究和摆弄,我似乎无法让这个简单的 nginx 重写功能正常工作。
我们需要进行几次重写,有些会有多个参数,但我甚至无法将这个简单的 1 参数当前 url 改变为所需的值。
当前的: website.com/public/viewpost.php?id=post-title
期望: website.com/public/post/post-title
有人能指出我做错了什么吗,我感到困惑/非常累......
为了在发布之前进行测试,我们只使用了服务器上的一个简单端口。以下是该部分。
# Listen on port 7774 for dev test
server {
listen 7774;
server_name localhost;
root /usr/share/nginx/html/paa;
index index.php home.php index.html index.htm /public/index.php;
location ~* /uploads/.*\.php$ {
if ($request_uri ~* (^\/|\.jpg|\.png|\.gif)$ ) {
break;
}
return 444;
}
location ~ \.php$ {
try_files $uri @rewrite =404;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_pass php5-fpm-sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location @rewrite {
rewrite ^/viewpost.php$ /post/$arg_id? permanent;
}
}
我尝试了无数次尝试,例如上面的@rewrite 和更简单的:
location / {
rewrite ^/post/(.*)$ /viewpost.php?id=$1 last;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_pass php5-fpm-sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
我似乎根本无法让任何事情发挥作用,我尝试过改变位置,尝试过多条规则……
请告诉我我做错了什么。
[根据 mod 建议从 stack overflow 移出]
答案1
在第二个代码中将位置替换为:
location /public/post/ {
rewrite ^/public/post/(.+) /public/viewpost.php?id=$1;
}