codeigniterのパスから「index.php」を削除する方法


回答:


90

Apacheを使用している場合は、以下を含む.htaccessファイルをルートWebディレクトリに配置します。

RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

別の良いバージョンはここにあります:

http://snipplr.com/view/5966/codeigniter-htaccess/


2
リンクの+1!少し調整する必要がありましたが。これで得た-> RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteRule ^(。*)$ index.php / $ 1 [QSA、L]
OrangeRind

何らかの理由で、RewriteCondの先頭にスラッシュを追加する必要がありました。 RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Henry

何らかの理由で、URLにindex.phpが含まれている場合、実際には削除されずにそのまま残り、機能し続けます。
CMCDragonkai

1
私はすべての可能な組み合わせを使用しましたが、それでもまだ機能しません!!!!! どのように機能させましたか?
Roshdy、2015年

Apacheのインストールは、.htaccessファイルをチェックするように構成する必要があります-そのようにしてください。
Sean Vieira、2015年

60

index.phpの削除に関していくつかの大きな問題がありました。原則として、以下の.htaccessは複数のサーバーでテストされており、通常は機能します。

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

<Files "index.php">
AcceptPathInfo On
</Files>  

それでもうまくいかない場合は、次のステップは設定ファイルを調整することです。他のURIプロトコルのいくつかを試してください。

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO

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

それでもうまくいかない場合は、書き換えルールを変更してサブフォルダーを含めるようにしてください。開発サーバーなどで一時的なURLを使用している場合、これはしばしば問題になります。

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

これらのオプションをいじってみれば、うまくいくはずです。また、インデックスファイルが次のように設定されていることを確認してください。

$config['index_page'] = '';

幸運を!


ここでの最初のコードが解決策だと思いましたが、実際にはdomain / *のようなURLをdomain / index.phpに送信しているだけで、domain / welcomeをウェルカムコントローラーに送信していません。そのとき一瞬興奮しました。今、他の提案を試みます。
jsky 2013

31

index.phpファイルと共に、アプリケーションのルートディレクトリに.htaccessファイルを置きます。(htaccess拡張子が正しいかどうかを確認してください。Bzhtaccess.txtが機能しませんでした。)

次のルールを.htaccessファイルに追加します。

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

次に、application / config / config.phpファイルで次の行を見つけます

$config['index_page'] = 'index.php';

以下のように変数を空に設定します。

$config['index_page'] = '';

それだけです、私にとってはうまくいきました。

それでも機能しない場合は、次の変数をこれらのパラメーター( 'AUTO'、 'PATH_INFO'、 'QUERY_STRING'、 'REQUEST_URI'、および 'ORIG_PATH_INFO')で1つずつ置き換えてみてください。

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

3
ありがとう、私は長い間知らないうちにこれに失敗してきましたが、なぜあなたのやり方はバターのように機能したのですか:D
アーメドサミー

1
MDeSilvaに感謝します。この投稿は私の時間を節約します。
sanji 2013

1
ありがとう。それは作品です。ところで、config.phpを変更する必要はありません。
Stony、2013年

1
おかげで、これは私を助けました、私は
WAMPで

21

system\application\config\config.phpファイルを見てください、という名前の変数がありますindex_page

このようになります

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

に変更

$config['index_page'] = "";

次に、前述のように、.htaccessファイルに書き換えルールを追加する必要があります

注:CodeIgniter v2では、このファイルはシステムフォルダーから移動され、 application\config\config.php


9

上記のすべての方法が失敗し、/ etc / apache2 / sites-available / defaultにある仮想ホストファイルでAllowOverride NoneAllowOverride Allに変更していないことがわかりました

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All    <---- replace None with All
    </Directory>
    <Directory /var/www >
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All   <---  replace None with All
            Order allow,deny
            allow from all
    </Directory>

     ...


どうもありがとうございます。AllowOverrideNoneも取得しました。これで機能します!
ウィリー

ブログはもうなくなったので、ぜひ読んでみたいと思います。これらの解決策のどれも私のために働いていません...
Kevin Beal

素晴らしい、私の日を救った。
JChow 2014年

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

RewriteRule。* index.php / $ 0 [PT、L]をプロジェクトフォルダー名「codeigniter」に変更した後 皆さんのサポートに感謝します。


6

ステップ1 => .htaccessファイルを、アプリケーションおよびシステムフォルダーが存在するルートフォルダーに配置します。

ステップ2 => yourdomain.com/project/などのサブフォルダーを使用するWebパスの場合、htaccessファイルで次のコードを使用します

RewriteEngine on
RewriteBase    /project/
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /project/index.php/$1 [L]

yourdomain.comなどのルートフォルダーを使用するWebパスの場合、htaccessファイルで次のコードを使用します

RewriteEngine on
RewriteBase    /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

上記の最初の例を使用して試したところ、私のルートでのみ機能しますが、フォームのロードでは機能しません。URLでindex.phpを使用しようとしますが、試してみて、それを整えることができる場合は、これに戻ります
Sam

@Vinodに感謝します。この問題に夢中になりました。長い間ネットを検索していて、さまざまなソリューションを試しましたが、ソリューションに出会うまでは機能しませんでした。 CIで次に進みます。ありがとうございました:)
gomesh munda 2017

5

追加するかもしれないと思った

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

は.htaccessであり、必ずapplication / config.php変数を次のように編集します。

取り替える

$config['uri_protocol'] = AUTO 

$config['uri_protocol'] = REQUEST_URI

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

これは間違いなく機能するはずです。


4

有効にしたことを確認しますmod_rewrite(私は有効にしていません)。
有効にする:

sudo a2enmod rewrite  

また、交換するAllowOverride Noneことにより、AllowOverride All

sudo gedit /etc/apache2/sites-available/default  

最後に...

sudo /etc/init.d/apache2 restart  

私の.htaccessは

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

私が使用可能にするために必要な他のモジュールましたactionsstackoverflow.com/questions/14419757/...
Jasdeepカルサ

4

完璧なソリューション[ローカルホストと実際のドメインでテスト済み]

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

3

これは私のCIプロジェクトの1つの.htaccessです。

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

最後の行で必要な情報が得られますが、フォルダー構造の設定方法に応じて「/ projectFolder」が必要になる場合と必要とされない場合があります。幸運を!



3

.htaccessファイルとして、Kohanaフレームワークが提供するファイルを使用することをお勧めします

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

うまく機能するのはよく考え抜かれた.htaccessです。


3

codeigniterのURLパスでindex.phpを解決するには2つの方法があります

1:config / config.phpでコードを変更:

$config['index_page'] = 'index.php';

$config['index_page'] = '';

2:ルートパスに.htacessを作成しない場合は作成し、次のコードをコピーします:-

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

それを保存してから、Apacheの設定rewrite_moduleまたはmod_rewriteが有効になっていることを確認してください。有効になっていない場合は有効にしてください。(ベストアプローチ)!


これは正しく、CodeIgniterのドキュメントから直接引用したものです。私もこの方法を使用しています。
Dewald Els 2017

2

私は多くの異なるホスティングのapache2でこれをテストしました、そしてそれは素晴らしい働きをします。

このhtaccessを使用

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

あなたが持っenabled mod_rewirteていることを確認してくださいphpinfo();

次にconfig / config.phpでこれを行います:

$config['index_url']    = '';
|
| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

まだ機能しない場合$config['uri_protocol']='AUTO'は、application/config/config.php40/54行目のリストにある内部ファイルのいずれかに変更してみてください。

時々私は使用:REQUEST_URIの代わりに、AUTOまたは"QUERY_STRING"のためのGoDaddyのhostingsを


2

\application\config\config.phpファイルを見て、という名前の変数がありますindex_page

このようになります

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

に変更

$config['index_page'] = "";

次に、前述の.htaccessように、次のようにファイルに書き換えルールを追加する必要があります。

RewriteEngine on
RewriteCond $1 !^(index\\.php|resources|robots\\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

それは私のために働く、あなたも願っています。


2

Linuxを使用していて、apache2サーバーを使用している場合は、.htaccessファイルの変更の他に、apache2.confファイルもオーバーライドする必要がある場合があります。/etc/apache2/apache2.confで apache2構成ファイルを見つけます。

検索ディレクトリ/ var / www /変更AllowOverrideなし-> AllowOverride All

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory

1

ルートWebディレクトリに.htaccessファイルを配置します

どんな微調整でも、上記が満たされない場合は機能しません。通常はSystemフォルダにあり、ルートにあるはずです。乾杯!


2
数時間を費やした後、私はこれを読んで、私の間違いを見つけました。
mohsin.mr 2013

この「ちょっとした」トリックのために、私は少なくとも1時間も費やしました。デフォルトでは、.htaccessファイルはapplicationルートではなくディレクトリにあります。
ヴァディム14

1

私は多くの解決策を試しましたが、私が思いついたのはこれです:

DirectoryIndex index.php
RewriteEngine on

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

これにより、必要に応じて、URLからindex.phpが削除されます。



0

これは、このコードを.htacessファイルのアプリケーションフォルダーに貼り付けるのに役立ちます

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

<Files "index.php">
AcceptPathInfo On
</Files>
<IfModule mod_php5.c>
  php_value short_open_tag 1
</IfModule>

0

これは私に完全な魔法をかけました:

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

それが役に立てば幸い!


0

こんにちはこれは私を働いた

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

これと同様に

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

このcodeigniterアプリケーションがサブドメインとしてホストされている場合、フォルダーはサブフォルダーの名前です(例:domainname / folder / index.php)。

うまくいきますように。ありがとう。


0

.htaccessに以下のコードをコピーします

RewriteEngine on
Options -Indexes
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

このコードは質問に答えることがありますが、このコードが質問に答える理由方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。
ベンジャミンW.

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

0

ステップ1 :

これをhtaccessファイルに追加します

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index.php [QSA,L] 
</IfModule>

ステップ2 :

codeigniter設定でindex.phpを削除します

$config['base_url'] = ''; 
$config['index_page'] = '';

ステップ3:

Apache設定でhtaccessの上書きを許可する(コマンド)

sudo nano /etc/apache2/apache2.confそしてファイルを編集して次のように変更します

AllowOverride All

wwwフォルダー用

ステップ4:

apache mod rewriteを有効化(コマンド)

sudo a2enmod rewrite

ステップ5:

Apacheを再起動(コマンド)

sudo /etc/init.d/apache2 restart
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.