Проблемы .htaccess: входной файл не указан - PullRequest
40 голосов
/ 13 октября 2009

Может кто-нибудь помочь мне с этим? У меня такое чувство, будто я уже 2 часа бьюсь головой о стену.

У меня установлено Apache 2.2.8 + PHP 5.2.6 на моей машине, и .htaccess с кодом ниже работает нормально, без ошибок.

RewriteEngine on
RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]

Тот же код на сервере моего хостинг-провайдера дает мне код ошибки 404 и выводит only: No input file specified. index.php. Я знаю, что у них установлен Apache (нигде не может найти информацию о версии), и они работают под управлением PHP v5.2.8.

Я на Windows XP 64-bit, у них какой-то Linux с PHP в режиме CGI/FastCGI. Кто-нибудь может подсказать в чем может быть проблема?

PS. если это важно, это для CodeIgniter для работы с дружественными URL.


Update1:

mod_rewrite установлен и включен.

Что я заметил, так это то, что если я изменю значение RewriteRule на /index.php?$1 (знак вопроса вместо косой черты), оно перейдет в бесконечный цикл. В любом случае, использование вопросительного знака не вариант, так как CodeIgniter (обязательно) не будет работать таким образом.

Домашняя страница также работает, когда я запрашиваю index.php напрямую: example.com/index.php

Я начинаю думать, что, возможно, Apache думает, что после добавления завершающего слеша это уже не файл, а папка. как изменить такое поведение?


Обновление 2:

Я был не прав.
Apache правильно обрабатывает эти URL.
Запрос http://example.com/index.php/start/ (домашняя страница) или любой другой действующий адрес работает.
Похоже, Apache просто по какой-то причине не пересылает запрос.


Обновление 3:

Просто чтобы было ясно, чего я пытаюсь достичь.
Я хочу переписать адреса так:

http://www.example.com/something/ => http://www.example.com/index.php/something/ http://www.example.com/something/else/ => http://www.example.com/index.php/something/else/

Ответы [ 12 ]

0 голосов
/ 13 октября 2009

Возможно, на вашем сервере отключено AcceptPathInfo, что необходимо для правильной работы URL-адреса такого типа. Попробуйте включить его:

AcceptPathInfo On

Хорошо, попробуйте это правило:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php(/|$) index.php%{REQUEST_URI} [L]
0 голосов
/ 13 октября 2009

Весьма вероятно, что администратор вашего хоста отключил возможность использования перезаписи в .htaccess. На них может даже не быть установлен mod_rewrite.

Оставьте им письмо и спросите

Поскольку это проблема конфигурации сервера, возможно, вам следует задать вопрос Ошибка сервера

Изменить (поскольку вы уверены, что сервер настроен правильно)

Рассматривали ли вы пометить RewriteCond концом строки $?

RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)

Будет (основываясь на моих ограниченных знаниях) заблокировать любой URL, содержащий index.php, css, gfx ... в начале URL. Поскольку у вас нет символа $ в конце регулярного выражения, он также заблокирует все URL-адреса, которые продолжаются с этого момента ...

I.e www.yourdomain.com/index.php/something не перенаправляется, то же самое с www.yourdomain.com/js/something

Возможно, вы захотите добавить $, который потребует окончания URL сразу после вашего регулярного выражения.

RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)$
...