Массив $_GET пуст

Мое приложение Kohana 3 использует довольно много параметров $_GET. Однако, когда я развернул приложение, я получил пустую страницу только с текстом «Не указан входной файл». Я быстро нашел решение этой, казалось бы, распространенной проблемы, изменив в своем файле .htaccess:

RewriteRule .* index.php/$0 [PT,L]

to

RewriteRule .* index.php?$0 [PT,L]

Однако теперь мой массив $_GET потерял все переданные параметры. Любая страница, не требующая $_GET, работает нормально. Я не слишком хорошо разбираюсь в файлах .htaccess, но, насколько я могу судить, добавление ? заменил массив $_GET на uri.

я тоже пробовал

RewriteRule .* index.php/?$0 [PT,L]

а также

RewriteRule .* index.php?/$0 [PT,L]

но безрезультатно.

Ниже приведен мой файл .htaccess полностью (в основном такой же, как example.htaccess)

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [F,L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php?$0 [PT,L]

Самое близкое к решению, которое я нашел, было это сообщение: http://forum.kohanaframework.org/discussion/comment/4857/#Comment_4857 Однако это похоже на более старую версию Kohana, и я не уверен, как это будет работать в Kohana v3.


person Jordan    schedule 11.02.2011    source источник


Ответы (3)


Использование QSA (добавление строки запроса) должно помочь:

RewriteRule .* index.php?$0 [PT,L, QSA]
person Pekka    schedule 11.02.2011
comment
Идеально, так просто. Вы только что сделали мой день. Спасибо. - person Jordan; 11.02.2011

Мне нужно внести два изменения в example.htaccess K03, чтобы заставить его работать:

RewriteRule ^(application|modules|system)/ - [F,L] вместо

RewriteRule ^(?:application|modules|system)\b - [F,L] (что дает внутреннюю ошибку сервера)

RewriteRule .* index.php [L] вместо

RewriteRule .* index.php/$0 [PT] (что дает сообщение «Не указан входной файл».)

Вот мой файл .htaccess для K03:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
#RewriteBase /

# Protect hidden files from being viewed

    Order Deny,Allow
    Deny From All

# Protect application and system files from being viewed
RewriteRule ^(application|modules|system)/ - [F,L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php [L]
person Emily    schedule 11.02.2011
comment
Как ни странно, это решение также сработало, когда я просто изменил последнюю строку на RewriteRule .* index.php [L] - person Jordan; 11.02.2011
comment
@jord - это единственный способ избавиться от ошибки 500, которая у меня была - спасибо! - person Dave Hollingworth; 22.05.2012

Получил точно такую ​​же ошибку, которая, я думаю, вызвана тем, что мой апач работает в режиме fastcgi. Любое вышеперечисленное решение с правилами htaccess работало для меня, но при поиске в Интернете я нахожу это правило:

RewriteRule .* index.php?kohana_uri=$0 [PT,L,QSA]

и просто замените им старый: RewriteRule .* index.php/$0 [PT,L]

person Marrbacca    schedule 31.01.2013