0

私は CodeIgniter フレームワークを探索する限界に達しており、ここで非常に基本的な問題に直面しています。pages という名前のコントローラーがあり、view という関数があります。

問題 1: example.com/myfolder/ と入力すると、自分のページに移動します。しかし、example.com/myfolder/index.php/pages/view や example.com/myfolder/pages/view などを試すと、404 エラーが発生します。

問題 2: URL から index.php を削除する必要があります。以下に貼り付けた .htaccess を修正してください。

コントローラ

class Pages extends CI_Controller {

    public function index() {
        $this->view("home");
    }

    public function view($page = 'home') {
        if (!file_exists('application/views/pages/' . $page . '.php')) {
            // Whoops, we don't have a page for that!
            show_404();
        }
        $data['title'] = ucfirst($page); // Capitalize the first letter
        $data['company_name'] = "Demo Company 2013";
        $this->load->view('templates/header', $data);
        $this->load->view('pages/' . $page, $data);
        $this->load->view('templates/footer', $data);
    }

}

ルート

$route['default_controller'] = 'pages';
$route['(:any)'] = 'pages/view/$1';
$route['404_override'] = '';

.htaccess

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

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

構成

$config['index_page'] = '';
$config['base_url'] = 'http://example.com/myfolder/';

アップデート

これは重要かもしれません。IISを使用している共有 Windows ホスティングでサイトを実行しています。したがって、.htaccess を に変換する必要があると思いますweb.config

更新 WEBCONFIG が追加されました

ここで、回答の 1 つで提供されているリンクから web.config を追加しました。どうもありがとう; とても役に立ちましたが、それでも同じ古い 404 エラーが発生します。次の構成ファイルを変更してみました

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

しかし、今私はエラーが発生しています

<!doctyle HTML>

どうすればこれを修正できますか?

4

3 に答える 3

2

このように.htaccessを書くことができます

Options -Indexes

Options +FollowSymLinks

DirectoryIndex index.php

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

</IfModule>

config.php ファイルを確認して、次のように変更します。

$config['base_url'] = '';

$config['index_page'] = '';
于 2013-05-28T06:40:36.693 に答える
0

この行が 404 にサービスを提供していると思います。

if (!file_exists('application/views/pages/' . $page . '.php')) {

それを次のように置き換えてみてください:

if (!file_exists(APPPATH.'views/pages/' . $page . '.php')) {
于 2013-05-28T08:13:21.057 に答える
0

これは私が通常使用するもので、多くのサーバーで機能します。

DirectoryIndex index.php

<IfModule mod_rewrite.c>

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

</IfModule>

<IfModule !mod_rewrite.c>
  ErrorDocument 404 index.php
</IfModule> 

?サーバーの構成によっては、 afterindex.phpを削除する必要がある場合があります。

変化する:

RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

に:

RewriteRule ^(.*)$ index.php/$1 [L,QSA]

そうしないと、404 No input specifiedエラーが発生する可能性があります

于 2013-05-28T06:51:04.020 に答える