Почему $_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, если он находится в подпапке)

Надеюсь, это поможет вам - зная, что это, безусловно, помогло бы мне много часов назад!

Другие вопросы по тегам