проблемы с.htaccess: Не указан входной файл


Может ли кто-нибудь помочь мне с этим? У меня такое чувство, будто я бьюсь головой о стену уже более 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. Кто-нибудь может подсказать, в чем может быть проблема?

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


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

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/

Author: Prabhu, 2009-10-13

12 answers

Я тоже бился головой об это. Я также устанавливаю воспламенитель кода.

Гучер не был базой для перезаписи. Вот мой .htaccess:

DirectoryIndex index.php

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)

RewriteRule ^(.*)$ index.php?/$1 [L]
 83
Author: jray, 2009-10-14 21:05:45

Проблема

Я только что столкнулся с аналогичной проблемой, и, к сожалению, ни один из ответов в этой теме не помог:

Zend Framework выдавал "Не указан входной файл"., но:

  • База перезаписи по умолчанию была просто прекрасной, и добавление RewriteBase / не помогло
  • Это сервер общего хостинга, и доступен только FastCGI (нет возможности переключиться на suPHP)
  • AcceptPathInfo был включен
  • Не было никаких проблем с переписыванием URL-адресов в целом на сервере

Итак, ответ пришел со следующего сайта: https://ellislab.com/forums/viewthread/55620/P15 [мертвая ссылка] (даже если хост не является хостом сновидений).

Решение

По-видимому, все, что вам нужно сделать, это заменить эту строку:

RewriteRule ^(.*)$ index.php/$1

С помощью этого:

RewriteRule ^(.*)$ index.php?/$1

Проблема решена.

 26
Author: Ynhockey, 2017-11-06 06:58:03

Это сработало для меня:

 <IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
 </IfModule>

После index.php знак вопроса важен!

 9
Author: A.G.THAMAYS, 2016-07-26 12:22:17

Попробуйте, работает ли он с более простым RewriteCond; например, с тем, который переписывает только все, что не является существующим файлом/папкой/ссылкой:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ /index.php/$1 [R,L]
 4
Author: kkyy, 2009-10-13 08:10:56

Пользователи Go Daddy:

  1. войдите в свою учетную запись Go Daddy
  2. нажмите на свою учетную запись хостинга.
  3. перейдите в Настройки > Управление расширениями файлов
  4. измените .php и .php5 для запуска под управлением PHP5.2X (вместо PHP5.2XFASTCGI)

РЕШЕНО!!!!

 4
Author: lesocute, 2013-04-06 01:33:31

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

Редактировать: Просто чтобы быть предельно ясным, я думаю, что лучше всего изменить правило перезаписи на:

RewriteRule ^(.*)$ /index.php?$1 [L]

Если только нет особой причины, по которой вы хотите, чтобы это была прямая косая черта.

Редактировать 2: Я вижу, что вы уже пробовали это. Причина, по которой вы получаете бесконечный цикл, заключается в том, что у вас есть index.php в вашем состоянии перезаписи. Если вы удалите это, вы должны быть свободны от бесконечного цикла.

 3
Author: Jay Paroline, 2009-10-13 06:03:55

.htaccess для реального сервера:-

DirectoryIndex index.php

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)

RewriteRule ^(.*)$ index.php?/$1 [L]

.htaccess для локального хоста:-

RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1
 1
Author: Parimal Nakrani, 2017-12-27 18:03:50

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

Отправьте им электронное письмо и спросите

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

Редактировать (так как вы уверены, что сервер настроен правильно)

Рассматривали ли вы возможность пометить свою секунду перезаписи концом строки $?

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

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

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

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

RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)$
 0
Author: Tom Leys, 2017-04-13 12:13:38

Вот один раз, когда я поймал no input file specified прямо на действии:

Это приводит к тому, что:

RewriteRule ^(.*\.swf)$  redirect_php.php/?a=1 [last]

Это исправило это:

RewriteRule ^(.*\.swf)$  redirect_php.php?a=1 [last]

Обратите внимание на / перед запросом ?

Похоже, это действительно связано с AcceptPathInfo, который касается возможности считывать пути после имен файлов:

http://domain.com/file.php/tricky_path/?regular_query_stuff
 0
Author: Johan, 2013-02-19 08:38:15

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

Всегда, я имею в виду всегда проверьте журналы вашего сервера, потому что они могут предоставить вам полезную информацию.


После проверки журналов моего сервера (Apache2.4) Я узнал, что open_basedir причина проблемы:

Mod_fcgid: stderr: PHP Предупреждение: Неизвестно: действует ограничение open_basedir. Файл(/data/sites/domain/public/index.php ) не находится в пределах разрешенных путей: (/usr/local/lib/php:/usr/local/bin:/данные/сайты/домен/http-документы) в неизвестном в строке 0

Mod_fcgid: stderr: PHP Предупреждение: Неизвестно: не удалось открыть поток: Операция запрещена в неизвестном в строке 0

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

 0
Author: halfpastfour.am, 2017-06-02 21:57:02

Возможно, вы используете Nginx, а не Apache. Сообщение об ошибке будет таким же.

Повторите ваши данные о разрыве, чтобы быть уверенным.

echo $_SERVER["SERVER_SOFTWARE"];
 0
Author: Yevgeniy Afanasyev, 2018-07-25 03:51:44

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

AcceptPathInfo On

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php(/|$) index.php%{REQUEST_URI} [L]
 -1
Author: Gumbo, 2009-10-13 08:05:41