web-dev-qa-db-ja.com

CodeIgniter htaccessおよびURL書き換えの問題

CodeIgniterを使用したことはありませんし、PHPフレームワークは言うまでもありません。試してみようと思いました。 URLからindex.phpを削除してもページにアクセスできないように見えることを除いて、すべてうまくいきます。

MVC構造を使用したことがないので、学習しながら学習しているので、これを間違えても許してください。

localhost/ci/aboutと入力するだけで、「about_page.php」という名前で作成したビューにアクセスしようとしていますが、現在は、 localhost/ci/index.php/aboutを使用して

ページのコントローラーは次のとおりです:/ application/controllers/about.php
ページのモデル:/ application/models/about_model.php
そしてページのビューは:/ application/views/about_page.php

この問題の解決策を探しましたが、見つかりませんでした。すでに検索した場所は次のとおりです。

CodeIgniter-index.phpの削除
Codeigniter-urlからindex.phpを削除する方法?
http://www.farinspace.com/codeigniter-htaccess-file/

CodeIgniterの 'application'フォルダーには、Allow Deny From Allのみを含む.htaccessファイルが付属しています。そこで、ルートディレクトリに新しい.htaccessファイルhttp://localhost/ci/.htaccessを作成し、次のコードを追加しました。

RewriteEngine On
RewriteBase /ci
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

.htaccessファイルがルートディレクトリにある場合、500 Internal Server Errorが発生します。まったく同じファイルをアプリケーションフォルダーにコピーすると、500エラーはなくなりますが、localhost/ci/aboutを使用してaboutページにアクセスできません

既に$config['index_page'] = 'index.php';$config['index_page'] = '';に変更し、$config['uri_protocol'] = 'AUTO';$config['uri_protocol'] = 'REQUEST_URI';に変更しようとしましたが、内部サーバーエラーが引き続き発生しています。

Httpd.confファイルにアクセスしてmod_rewrite.soモジュールのコメントを外したので、mod_rewriteがアクティブであることがわかります。

なぜこれが機能しないのか、どのように私はこの仕事を得ることができるのでしょうか?このテーマに関するStackOverflowの質問はたくさんありますが、私の質問に答える質問は見つかりませんでした。

私はこれを正しくやっていますか? localhost/ci/aboutにアクセスしてaboutページにアクセスできますか、または 'application'に 'about'ディレクトリを作成する必要がありますか'ディレクトリ?

38
Ty Bailey

index.phpを削除するには3つの手順があります。

  1. application/config.phpファイルに以下の変更を加えます

    $config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your Ci folder_name';
    $config['index_page'] = '';
    $config['uri_protocol'] = 'AUTO';
    
  2. 以下のコードを使用して、ルートディレクトリに.htaccessファイルを作成します

    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    
  3. 書き換えエンジンを有効にします(まだ有効になっていない場合)

    i。まず、次のコマンドで開始します。

    a2enmod rewrite
    

    ii。ファイルの編集/etc/Apache2/sites-enabled/000-default

    すべてのAllowOverride NoneAllowOverride Allに変更します。

    注:最新バージョンでは、/etc/Apache2/Apache2.confファイルを変更する必要があります

    iii。次のコマンドでサーバーを再起動します。

    Sudo /etc/init.d/Apache2 restart
    
75
Rahul Chipad

.htaccessは少しずれています。私のものを見てください:

 RewriteEngine On
 RewriteBase /codeigniter  

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
  RewriteRule ^(.*)$ /codeigniter/index.php?/$1 [L]

2つの場所で「codeigniter」に注意してください。

その後、設定で:

base_url = "http://localhost/codeigniter"
index = ""

必要に応じてcodeigniterを「ci」に変更します

5
jmadsen
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /dmizone_bkp
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
   RewriteRule ^(.*)$ /dmizone_bkp/index.php?/$1 [L]
</IfModule> 
4
Vinilnbr

これは私のために働く

。htaccessファイルをルートフォルダーに移動します(私の場合、アプリケーションフォルダーの前に配置します)

RewriteEngine on
RewriteBase /yourProjectFolder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

私のconfig.phpは次のようになります(application/config/config.php

$config['base_url'] = "";
$config['index_page'] = "index.php";
$config['uri_protocol'] = "AUTO";

あなたのために働いているかどうかも教えてください!乾杯!

3
William Kheng

私はこのようなものを使用しています- codeigniter-htaccess-file 、それは最初から良い記事です。

  • cIルートディレクトリに.htaccessファイルを残します
  • mod_rewriteがオンになっていることを確認してください
  • 入力ミスがないか確認します(コントローラーファイル/クラス名など)
  • /application/config/config.phpセット$config['index_page'] = "";
  • /application/config/routes.phpセットyourデフォルトコントローラー$route['default_controller']="home";

CI(2.1.3)のクリーンインストールを実行している場合、実際にはそれほど問題はありません。

  • 2つの構成ファイル
  • コントローラ
  • .htaccess
  • mod_rewrite

読む

2
Velja Matic

沼サーバーのユーザーについては、@ Raul Chipadのソリューションの最初の2つの手順に従ってください:

  1. 沼のアイコン(通常は緑色)をクリックし、[Apache]> [Apacheモジュール]> [rewrite_module]に移動します。 「rewrite_module」にチェックマークを付ける必要があります!そして、それが進むべき道です!
1

Linux Ubuntu 14でも同様の問題がありました。

ブラウザに403エラーメッセージが常に表示され、ここですべての回答を読んだ後、何が間違っているのかわかりませんでした。

その後、Apacheのエラーログに到達し、最終的に少し予想外であるが完全に論理的なヒントを得ました。

codeIgniterメインフォルダーには、フォルダーに対するX権限がありませんでした。他のすべてをWebサーバーが読み取れないようにします。

chmod ugo + x yourCodeIgniterFolder

最初の問題を修正。 403エラーを強制終了しました。

しかし、その後、エラー500が発生し始めました。

Culpritは.htaccessの間違った設定行でした

その後、PHPエラーが発生し始めました。

Culpritは、メインフォルダーと同じ問題でしたが、アプリケーションフォルダーとシステムフォルダーの内部フォルダーに対する「その他」権限のXフラグはありませんでした。

この質問に対する私の2セント:READ Apache Error.log。

ただし、セキュリティの問題にも注意してください。 CodeIgniterは、アプリケーションとシステムフォルダーをWebスペースから移動することを推奨しています。したがって、これらのフォルダーがWebスペースに残っている場合、アクセス許可の変更には細心の注意を払ってください。

ここで言及する価値があるもう1つのことは、ダウンロードしたCodeIgniterアーカイブをWebスペースに直接解凍したことです。フォルダーのアクセス許可は、アーカイブから直接作成される可能性があります。与えられているように、それらは安全ですが、フォルダアクセスの問題(Unixのようなシステムで)はCodeIgniterのマニュアルに記載されていません https://codeigniter.com/user_guide/installation/index.html そしておそらくそれは言及されるでしょう運用システムのセキュリティを厳しく保ちながら、CodeIgniterのセキュリティを緩和する方法に関するガイドラインがあります(前述のように、いくつかのセキュリティヒントがマニュアルにすでにあります)。

1
ljgww

動作しない場合

$config['uri_protocol'] = 'AUTO';

に変更する

$config['uri_protocol'] = 'PATH_INFO';

動作していない場合は、それを変更します

$config['uri_protocol'] = 'QUERY_STRING';

これを使用する場合

$config['uri_protocol'] = 'ORIG_PATH_INFO';

htaccessにないURLへのリダイレクトまたはヘッダーの場所が機能しない

1

デフォルトでは、以下はapplicationフォルダーにあり、提案されているようにルートdirに移動します。

leave the .htaccess file in CI root dir

0
Cyber

これを.htaccessファイルに追加するだけです:

DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]
0