web-dev-qa-db-ja.com

.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を使用していますが、CGI/FastCGIモードでいくつかのLinuxPHPで実行しています。誰が問題の可能性を提案できますか?

PS。それが重要な場合は、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/

41
Michal M

私もこれに頭を打ちました。 Code Igniterもインストールしています。

グーチャーはRewriteBaseでした。これが私の.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]
85
jray

問題

私は今、同様の問題に遭遇しましたが、残念ながらこのスレッドの答えはどれも助けませんでした:

Zend Frameworkは「入力ファイルが指定されていません」を提供していましたが、次のとおりです。

  • デフォルトのRewriteBaseは問題なく、RewriteBase /助けにはならなかった
  • 共有ホスティングサーバーであり、FastCGIのみが使用可能です(SuPHPに切り替える機能はありません)
  • AcceptPathInfoはオンでした
  • サーバー上のURL書き換え全般に問題はありませんでした

そのため、答えは次のサイトから来ました: https://ellislab.com/forums/viewthread/55620/P15 [dead link](ホストがDreamHostではない場合でも)。

解決策

どうやらあなたがする必要があるのは、この行を置き換えることです:

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

これとともに:

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

問題が解決しました。

27
Ynhockey

これは私のために働いた:

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

index.phpの後に、疑問符が重要です!

9
A.G.THAMAYS

Daddyユーザーに移動:

  1. go Daddyアカウントにログインします
  2. ホスティングアカウントをクリックします。
  3. [設定]> [ファイル拡張子の管理]に移動します
  4. .phpと.php5を(PHP5.2xFastCGIではなく)PHP5.2Xで実行するように変更します。

解決しました!!!!

4
lesocute

シンプルなRewriteCondで動作するか試してください。既存のファイル/フォルダー/リンクではないすべてのもののみを書き換えるようなもの:

RewriteEngine on

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

RewriteRule ^(.*)$ /index.php/$1 [R,L]
4
kkyy

mod_rewriteは、どのようなリダイレクトを行うべきかを把握しようとするため、それ自体の利点には少しスマートすぎます。この場合、mod_rewriteは、フォルダにリダイレクトしようとしているため、フォルダを探して見つけることができないため、エラーが発生します。

編集:完全に明確にするために、書き換えルールを次のように変更することをお勧めします。

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

スラッシュにしたい非常に特定の理由がない限り。

編集2:すでにこれを試したことがわかります。無限ループになるのは、rewrite条件にindex.phpがあるためです。これを削除すると、無限ループから解放されます。

3
Jay Paroline

Live Serverの.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]

Localhostの.htaccess:-

RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1
1
Parimal Nakrani

ApacheではなくNginxを使用している可能性があります。エラーメッセージは同じです。

確実にサーバーデータをエコーアウトしてください。

echo $_SERVER["SERVER_SOFTWARE"];
0

ホストの管理者が.htaccessでRewriteを使用する機能を無効にしている可能性が非常に高いです。 mod_rewriteがインストールされていない場合もあります。

メールをドロップして尋ねる

これはサーバー構成の問題であるため、おそらく Server Fault

編集(サーバーが正しく構成されていることを確認しているため)

RewriteCondに行末の$をタグ付けすることを検討しましたか?

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
Tom Leys

この質問は多くの注目を集めているようであるため、同じ問題に遭遇し、既存の回答では解決できない人々のために、別の回答を提案したいと思います。私自身は5分前までその人の一人でした。

常に、私はalwaysが意味するのは、サーバーログが有用な情報を提供する可能性があるためです。


サーバーログ(Apache2.4)を確認した後、open_basedirが問題を引き起こしていることがわかりました。

mod_fcgid:stderr:PHP警告:不明:open_basedir制限が有効です。ファイル(/data/sites/domain/public/index.php)は許可されたパス内にありません:(/ usr/local/lib/php:/ usr/local/bin:/ data/sites/domain/http-docs)in Unknown in line 0

mod_fcgid:stderr:PHP警告:不明:ストリームを開けませんでした:行0の不明で操作が許可されていません

この場合、open_basedirはopen_basedir設定の外部を指すため、作成したシンボリックリンクを処理できませんでした。 open_basedir設定を新しい場所にも広げるか、必要なファイルを許可されたディレクトリ内に移動します。

0
halfpastfour.am

これは私が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
Johan