2012-01-05 45 views
3

私はCodeigniterで自分のサイトのページへのルーティングを設定しようとしていますが、私は403を取得しました。ルート設定ファイルの403 CodeigniterのURIルーティングで禁止されています

コードは次のようになります。それは正常に動作します

$route['photo/(:num)'] = "viewphoto/view/$1"; 
$route['photo'] = 'photo'; 

$route['photos'] = "photospage/index"; 
$route['photos'] = 'photos'; 

$route['default_controller'] = 'homepage'; 
$route['homepage'] = 'homepage'; 

(たとえば)mysite.com/photo/2しようとして、ホームページがそうであるように。しかし、mysite.com/photosに行くと、403 Forbiddenというエラーメッセージが表示されます。

私はそれを解決できません、ルーティングはexctly mysite.com/photo/2ルーティングと同じに設定されています。

それが指しているコントローラはphotospageと呼ばれ、その内部の関数はindexと呼ばれます。

私はmysite.com/photos/indexに行く場合、それはしかし動作します...

任意の助けが最も高く評価され:)

EDIT:

変更ルートの設定ファイルに私はmysite.com/photosに行っても以下のように動作しません。私の代わりに「インデックス」の「ビュー」にコントローラ機能を変更し、それはまだ動作しません:(

$route['photos'] = "photos/view"; 
$route['photo/(:num)'] = "viewphoto/view/$1"; 
$route['default_controller'] = 'homepage'; 

ホームページと写真/ $ idはまだかかわらず、正常に動作。

+0

デフォルトでは、コントローラが関数なしで呼び出されると、自動的にインデックス関数が実行されます。また、なぜあなたは写真のための2つのルートを持っていますか? – Rooneyl

+0

1つはmysite.com/photosのルートで、サムネイルでいっぱいのページを表示し、もう1つはmysite.com/photo/$idで、ユーザーがサムネイルをクリックしたときに特定の写真ページを表示します。 –

+0

私はあなたがCIを混乱させるかもしれないと思います。 2番目のルールセットには、異なるコントローラを指す$ route ['photos']があります。どのようなものを選択すればよいでしょうか? – Rooneyl

答えて

3

あなたrewriteルールは次のようになります。

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

あなたの/application/config/config.php

からあなたindex.phpエントリを削除する必要があることを正しく403禁じられエラーが故障し.htaccess書き換えが原因かもしれない設定であることを確認します。

+0

これはほとんど動作します。私のサイトは私のメインドメインの開発者のためにサブディレクトリに保存されていて、上のディレクトリをロードするだけで、私のサイトは3行目のindex.phpの前に\を削除しなければならなかった...ルーティングは動作するが画像はないまたはCSSがロードされています... –

+1

オック私はそれを考え出している! 2つの問題がありました:1)書き直しの2行目にcssディレクトリを追加するのを忘れました。 2)「写真」というフォルダがあり、ページに使用されている写真の量が保存されています(名前が変更されています)。これはルーティングと競合していたようです。ありがとうJakub! –

+1

私の場合は、この問題の原因となったルートと同じ名前のディレクトリでした。(不要な)ディレクトリを削除すると、問題が解決しました。 –

2

OK、のは、見てみましょう

$route['photo/(:num)'] = "viewphoto/view/$1"; 

これは、このような任意のURLをつかむだろう:1によって、これらの1(あなたのドメインが「example.com」で、あなたは「index.phpのは、」」.htaccessのを介して隠されていると仮定した場合)をご覧http://example.com/photo/36とそれを/application/controllers/viewphotoコントローラにルーティングし、viewメソッドを呼び出して、それを36として渡しますパラメータ。


$route['photo'] = 'photo'; 

これは、このような任意のURLをつかむだろう:/application/controllers/photoコントローラにhttp://example.com/photoとルートそれを、そしてパラメータなしでindexメソッドを呼び出します。


$route['photos'] = "photospage/index"; 

これは、このような任意のURLつかむます:/application/controllers/photospageコントローラにhttp://example.com/photosとルートそれを、そしてパラメータなしでindexメソッドを呼び出します。


$route['photos'] = 'photos'; 

これは、このような任意のURLをつかむだろう:/application/controllers/photosコントローラにhttp://example.com/photosとルートそれを、そしてパラメータなしでindexメソッドを呼び出します。それは右の前に1を複製するため このルートが呼び出されることはありません飽きないだろう、それ


$route['default_controller'] = 'homepage'; 

これは/application/controllers/homepageコントローラにそれをこれまで捕まえて、ルートされていない任意のURLをつかむだろう、とコールパラメータなしのindexメソッド。


$route['homepage'] = 'homepage'; 

これは、このような任意のURLつかむます:/application/controllers/homepageコントローラにhttp://example.com/homepageとルートそれを、そしてパラメータなしでindexメソッドを呼び出します。

これはコントローラにindexメソッドを持たないことと関連があります。そうでない場合は、.htaccessファイルの内容を確認する必要があります。

+0

私はそれがインデックス関数とは関係ないと思います。私はそれをビュー関数に変更しましたが、それはまだ動作しません。しかし、それは動作するはずです、私はなぜdoesntnt得るのか分からない。 'index.phpを隠すように修正した私の.htaccessファイルの内容は次のとおりです:' RewriteEngine on RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteCond%{REQUEST_FILENAME}! - l RewriteRule ^(。*)$ index.php?/ $ 1 [L] ' –

+0

更新されたルート設定ファイルで質問を更新しました。同じ403エラーが表示されます。 –

+0

それはあなたの '写真'コントローラかもしれません。それはどう? – swatkins

0

この問題は、403エラーをスローするルートと同じ名前のディレクトリがある場合に発生する可能性があります。ディレクトリを削除または名前を変更すると、ルートが機能します。

関連する問題