我有下面的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]
型
我该怎么做才能确保表单不需要尾随斜杠?
1条答案
按热度按时间hfwmuf9z1#
然而,当我有一个html表单,其操作没有尾随斜杠时,表单不会提交,页面只是重新加载或转发。
因为当 browser 被重定向为301 permanent(或302 temporary)HTTP状态时,重定向的(第二个)请求变成了GET请求,因此可能在初始请求中的任何POST数据都会丢失。
但是,这是一个内部HTML表单,您应该已经将请求提交到规范URL(带尾随斜杠)以开始-它不应该被重定向。(重定向大概只针对外部访问者?)
如果你确实需要通过重定向保留HTTP请求 * 方法 *,那么使用308 * 永久 *(或307 * 临时 *),这将保留POST数据。然而,在这种情况下,这不应该是必要的,因为你真的应该在开始时使用规范URL进行POST。
.htaccess
(Apache)配置文件;这可能是一个Nginx服务器?!