HTML表单中的Nginx尾随斜杠

jtjikinw  于 5个月前  发布在  Nginx
关注(0)|答案(1)|浏览(114)

我有下面的nginx配置。我添加了一行“rewrite ^([^.]*[^/])$$1/ permanent;”,以确保当我的网站页面被访问时,他们没有尾随斜杠,他们仍然工作。然而,当我有一个html表单与一个动作没有尾随斜杠,表单不提交,页面只是重新加载或转发。我不知道到底是哪一个。

server {
    listen 80;
    listen [::]:80;
    server_name mysite.com;
    
    rewrite ^([^.]*[^/])$ $1/ permanent;
    absolute_redirect off;
    server_name_in_redirect on;

    location / {
        proxy_pass http://webserver:80/;
    }

    location ~ /.well-known/acme-challenge {
        allow all;
        root /tmp/acme_challenge;
    }
}

字符串
没有尾随斜杠的html表单:

<form method='post' action='action/submit'>


带有尾随斜杠的html表单:

<form method='post' action='action/submit/'>


htaccess:

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(css)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php [L,QSA]


我该怎么做才能确保表单不需要尾随斜杠?

hfwmuf9z

hfwmuf9z1#

然而,当我有一个html表单,其操作没有尾随斜杠时,表单不会提交,页面只是重新加载或转发。
因为当 browser 被重定向为301 permanent(或302 temporary)HTTP状态时,重定向的(第二个)请求变成了GET请求,因此可能在初始请求中的任何POST数据都会丢失。
但是,这是一个内部HTML表单,您应该已经将请求提交到规范URL(带尾随斜杠)以开始-它不应该被重定向。(重定向大概只针对外部访问者?)
如果你确实需要通过重定向保留HTTP请求 * 方法 *,那么使用308 * 永久 *(或307 * 临时 *),这将保留POST数据。然而,在这种情况下,这不应该是必要的,因为你真的应该在开始时使用规范URL进行POST。

  • 旁白:* 为什么你包含了一个.htaccess(Apache)配置文件;这可能是一个Nginx服务器?!

相关问题