誰かがこれで私を助けることができますか? 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
モードでいくつかのLinux
をPHP
で実行しています。誰が問題の可能性を提案できますか?
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/
私もこれに頭を打ちました。 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]
問題
私は今、同様の問題に遭遇しましたが、残念ながらこのスレッドの答えはどれも助けませんでした:
Zend Frameworkは「入力ファイルが指定されていません」を提供していましたが、次のとおりです。
RewriteBase /
助けにはならなかったそのため、答えは次のサイトから来ました: https://ellislab.com/forums/viewthread/55620/P15 [dead link](ホストがDreamHostではない場合でも)。
解決策
どうやらあなたがする必要があるのは、この行を置き換えることです:
RewriteRule ^(.*)$ index.php/$1
これとともに:
RewriteRule ^(.*)$ index.php?/$1
問題が解決しました。
これは私のために働いた:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
index.php
の後に、疑問符が重要です!
Daddyユーザーに移動:
解決しました!!!!
シンプルなRewriteCond
で動作するか試してください。既存のファイル/フォルダー/リンクではないすべてのもののみを書き換えるようなもの:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ /index.php/$1 [R,L]
mod_rewrite
は、どのようなリダイレクトを行うべきかを把握しようとするため、それ自体の利点には少しスマートすぎます。この場合、mod_rewrite
は、フォルダにリダイレクトしようとしているため、フォルダを探して見つけることができないため、エラーが発生します。
編集:完全に明確にするために、書き換えルールを次のように変更することをお勧めします。
RewriteRule ^(.*)$ /index.php?$1 [L]
スラッシュにしたい非常に特定の理由がない限り。
編集2:すでにこれを試したことがわかります。無限ループになるのは、rewrite条件にindex.phpがあるためです。これを削除すると、無限ループから解放されます。
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
ApacheではなくNginxを使用している可能性があります。エラーメッセージは同じです。
確実にサーバーデータをエコーアウトしてください。
echo $_SERVER["SERVER_SOFTWARE"];
ホストの管理者が.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)$
この質問は多くの注目を集めているようであるため、同じ問題に遭遇し、既存の回答では解決できない人々のために、別の回答を提案したいと思います。私自身は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設定を新しい場所にも広げるか、必要なファイルを許可されたディレクトリ内に移動します。
これは私が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