Несколько дней назад у меня возник вопрос об удалении index.php из адресной строки, поэтому адрес страницы выглядит короче и лучше. Самое короткое решение этой проблемы: ( RewriteRule ^ index.php / [L, R = 301] в файле .htaccess ). И это работает!
Поскольку я помещаю эту строку в .htaccess, некоторые страницы перенаправляются на главную страницу. Почему? Насколько я понимаю, ответ RewriteRule ^index.php / [L,R=301]
: с RewriteRule ^index.php / [L,R=301]
, параметры $ _POST не отправляются на следующую страницу. Параметры $ _GET в порядке. Как только я удалю RewriteRule ^index.php / [L,R=301]
из .htaccess, все станет нормально, как обычно. Почему это происходит и как это исправить?
Спасибо.
Флаг [R]
перенесет перенаправление. А пользователь-агенты выдают перенаправление как GET
. Ничто не может быть сделано, если вы действительно хотите сократить URL-адреса до пути /
root.
Тем не менее, вы можете блокировать запросы POST от перезаписи / перенаправления:
RewriteCond %{REQUEST_METHOD} !POST RewriteRule ^index.php / [L,R=301]
Вместо этого вы можете попробовать использовать [L,R=307]
. 307 не должны изменять метод запроса в соответствии со спецификацией, но я не знаю, как браузер реализовал 307.
Но корень проблемы заключается в использовании <form action="____/index.php" ...
Просто оставьте действие пустым для POST для текущего URL, например
Я использую что-то вроде:
<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), проверьте этот вопрос: возможно ли перенаправить почтовые данные?
Значения POST НИКОГДА не переживут внешнего перенаправления ( R=301
), это ответственность за безопасность, поэтому браузеры никогда не поддержат это. Удалите R=301
и все будет в порядке. Вам просто нужно изменить все существующие ссылки на страницу на более короткие / красивые ( <a>
, но также и на действия и т. Д.),
У меня были те же проблемы, но мои htacces были такими:
RewriteEngine on RewriteRule .* index.php [NC]
Просто измените NC на L, и все работает нормально.
Итоговый код:
RewriteEngine on RewriteRule .* index.php [L]