Подтвердить что ты не робот

Кажется, что значения POST теряются при использовании .htaccess RewriteRule. Значения GET в порядке. Как исправить?

Несколько дней назад у меня возник вопрос об удалении index.php из адресной строки, поэтому адрес страницы выглядит короче и лучше. Самое короткое решение этой проблемы было (RewriteRule ^ index.php/[L, R = 301] в файле .htaccess). И это работает!

Поскольку я помещаю эту строку в .htaccess, некоторые страницы перенаправляются на главную страницу. Почему? Насколько я понимаю, ответ таков: с параметрами RewriteRule ^index.php / [L,R=301], $_POST не отправляются на следующую страницу. Параметры $_GET в порядке. Как только я удалю RewriteRule ^index.php / [L,R=301] из .htaccess, все станет нормально, как обычно. Почему это происходит и как это исправить?

Спасибо.

4b9b3361

Ответ 1

Флаг [R] перенесет перенаправление. А пользователь-агенты выдают перенаправление как запрос GET. Нет ничего, что можно было бы сделать, если вы действительно хотите сократить URL-адреса до корневого пути /.

Тем не менее, вы можете блокировать запросы POST от перезаписи/перенаправления:

RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^index.php / [L,R=301]

Ответ 2

Вместо этого вы можете использовать [L,R=307]. 307 не должен изменять метод запроса в соответствии со спецификацией, но я не знаю, как браузер реализовал 307.

Но корень проблемы заключается в использовании <form action="____/index.php" ...

Просто оставьте действие пустым для POST в текущем URL, например.

Ответ 3

Я использую что-то вроде:

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/(css|images|js)/

# don't rewrite existing files, directories and links

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l


# rewrite everything else to index.php

RewriteRule .* index.php [L]

</IfModule>

И его работа для всех запросов, переписывая его через файл index.php. Если вам нужно переадресовать 301 (что означает код Moved Permanentently), проверьте этот вопрос: Возможно ли перенаправить почтовые данные?

Ответ 4

Значения POST НИКОГДА не выживут при внешнем перенаправлении (R=301), это ответственность за безопасность, поэтому браузеры никогда не будут поддерживать это. Удалите R=301, и все будет в порядке. Вам просто нужно изменить все существующие ссылки на страницу на более короткую/более красивую (<a>, но также создавать действия и т.д.).

Ответ 5

У меня были те же проблемы, но мои htacces были такими:

RewriteEngine on
RewriteRule .* index.php [NC]

Просто измените NC на L, и все будет хорошо.

Конечный код:

RewriteEngine on
RewriteRule .* index.php [L]

Ответ 6

В моем случае я использовал .htaccess. Ссылка: PHP $ _POST не работает?

т.е. action = "booking.php" to action = "booking" работал для меня