Почему $ _POST пусто при использовании [QSA] в .htaccess? - PullRequest
3 голосов
/ 19 января 2011

В .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 ]

0 голосов
/ 25 сентября 2011

У меня была именно эта проблема. Он работает на одном сервере, а не на следующем. Раздражает и отнимает много времени, если не сказать больше!

После долгих проверок с использованием этого 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, если он находится в подпапке)

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

0 голосов
/ 28 ноября 2013

по умолчанию, .. возможно 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>
0 голосов
/ 27 января 2011

Как насчет изменения вашего правила таким образом. Это что-то меняет?

RewriteRule ^(.*)\.htm$ index.php?url=$0.htm [QSA,L]
...