web-dev-qa-db-ja.com

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

中央のどこかにあるcodeigniterのすべてのパスに突き出ている"index.php"を削除するにはどうすればよいですか? index.php-fied URLs以外をきれいにしたいですか?

114
OrangeRind

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

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/

89
Sean Vieira

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'] = '';

幸運を!

60
jimbo2087

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';
31
Shaolin

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

このように見えるはずです

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

に変更する

$config['index_page'] = "";

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

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

21
Re0sless

上記のすべての方法が失敗し、AllowOverride NoneからAllowOverride All/ etc/Apache2/sites-available/defaultにある仮想ホストファイル

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

     ...
9
waqas

ステップ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]
6
vinod
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
Captain Sparrow
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

これは間違いなく機能しなければなりません。

5
Ramaraju.d

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

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
Jefkine Kafunah

mod_rewriteが有効になっていることを確認してください(そうではありませんでした)。
有効にする:

Sudo a2enmod rewrite  

また、AllowOverride NoneAllowOverride 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]  
4
miguelitomp

完璧なソリューション[localhostと実ドメインでテスト済み]

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

CI wikiの このチュートリアル の指示に従ってmod_rewriteを使用します。

3
Ben S

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

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

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

3
Matthew Rapati

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 OR mod_rewriteが有効になっています。有効になっていない場合は有効にしてください。 (ベストアプローチ)!

3
Devraj Gupta

.htaccessファイルとして、 Kohana Framework によって提供されるものを使用するのが良いオプションです。

# 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
laurent

\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
glider

私は多くの異なるホスティングのApache2でこれをテストしましたが、うまく機能します。

このhtaccessを使用

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

enabled mod_rewirtephpinfo();が付いていることを確認してください

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'を行40/54にリストされているapplication/config/config.phpファイルのいずれかに変更してください。

goDaddyホスティングにAUTOまたはREQUEST_URIの代わりに"QUERY_STRING"を使用することもありました。

2
itsme

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

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

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

私は多くのソリューションを試しましたが、私が思いついたのはこれです:

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が削除されます。

1
codegeek

これらの行を.htaccessファイルで使用します。ルートフォルダに配置します

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

その後、 http://example.com/controller/function/parameter にアクセスできます

http://example.com/index.php/controller/function/parameter の代わりに

1
Scorpion

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

あなたが何を微調整しても-上記が満たされない場合-それは動作しません。通常、Systemフォルダーにあり、ルートにあります。乾杯!

1
foxybagga

これは私に完全な魔法を与えました:

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
bmnepali

ステップ1:

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

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

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

ステップ2:

Codeigniter configの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の書き換え

ステップ5:

Apacheの再起動(コマンド)

Sudo /etc/init.d/Apache2 restart
0
Shashank Saxena

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

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
Majid
<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
mohd jagir

.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]
0
dev87

こんにちはこの1つは私を働いた

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
lightup