Почему $_POST пусто при использовании [QSA] в.htaccess?
У меня есть следующее в.htaccess:
RewriteCond %{REQUEST_URI} !app/index\.php$
RewriteRule ^(.*\.htm)$ index.php?url=$0 [QSA,L]
Все прекрасно работает, но в результате URL-адреса имеют пустой $_POST.
Я на 100% уверен, что это ошибка mod_rewrite, а не HTML или PHP, потому что когда я изменяю [QSA,L] на [L], он прекрасно работает. Но мне действительно нужен QSA.
Это происходит примерно на 30% хостингов, так что это может быть опцией конфигурации Apache.
3 ответа
Как насчет изменения вашего правила таким образом. Это что-то меняет?
RewriteRule ^(.*)\.htm$ index.php?url=$0.htm [QSA,L]
По умолчанию.. возможно apache не включает mod_rewrite, попробуйте набрать это на консоли
sudo a2enmod rewrite
образец моего.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>
У меня была именно эта проблема. Он работает на одном сервере, а не на следующем. Раздражает и отнимает много времени, чтобы не сказать больше!
После большой проверки с помощью этого php:
foreach ($_REQUEST AS $key => $value) echo $value."<br>";
в верхней части index.php, чтобы проверить, какие значения были отправлены из файла htaccess (и многих других проверок, которые я не буду выполнять!) В конце концов я обнаружил, что вам нужно указать "RewriteBase"
Добавление RewriteBase /
к началу файла htaccess заставил его работать на всех серверах, которые я пробовал.
(также не забудьте установить на: RewriteBase /folder-where-file-is/
где "folder-where-file-is" - это расположение файла index.php, если он находится в подпапке)
Надеюсь, это поможет вам - зная, что это, безусловно, помогло бы мне много часов назад!