1

静的 Web サイトの 1 つを codeIgniter 対応の Web サイトにアップグレードしました。404 エラーを回避するために、古い Web サイトの正確なドメイン名を新しい Web サイトにリダイレクトする必要があります。

  • 古いページ >http://example.com/pagename.php
  • 新しいページ >http://example.com/index.php/home/category_images/9(cat_id)

私は非常に高いノーをしません。すべてのページを直接ハードコーディングすることは問題になりません。私が試してみました :

RewriteEngine On
RewriteBase /
RewriteRule ^http://www.example.com/pagename.php$ http://example.com/index.php/home/category_images/9 [L,R=301]

機能していません。理由がわかりません。mod_rewrite私のApacheサーバーで有効になっています。

また、確認のため、このファイルをどのフォルダに置くべきか教えてください。ルート ディレクトリとアプリケーション フォルダの間で混乱しています。

ありがとうございました。

バージョン 2: マイケル氏からの提案の後、次のようなリダイレクト機能を使用して実装しようとしました:

デフォルトのコントローラ関数: home.php

function __construct()
{
    // Call the Model constructor
    parent::__construct();
    $this->load->model('common_model');
    $this->handle_redirects();
}

function handle_redirects () 
{
    $redirects = Array(
    'gorgeous-girls.php' => 'home/category_images/9'
    );
    $uri = implode('/', $this->uri->segments);
    foreach ($redirects as $from => $to)
    {
        $from = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $from));
        if (preg_match("#^{$from}$#i", $uri))
        {
        if (strpos($to, '$') !== false and strpos($from, '(') !== false)
            $to = preg_replace("#^{$from}$#i", $to, $uri);
        redirect($to , 'location', 301);
        }
    }
}

そして、私の .htaccess は次のようになります:

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

PS : ドメイン名構造から index.php を削除しました。次のようになります: www.example.com/controller/function/uri/uri

現在、ホストからエラー ページを取得していませんが、CodeIgniter からエラー ページを取得しています。

助けてください。

4

3 に答える 3

0

書き換えルールの一致部分でドメイン名全体を使用しません。これを試して:

RewriteRule ^pagename.php$ /index.php/home/category_images/9 [L,R=301]

もちろん、 /image.php/home/category_images/9 にあるものではなく、 index.php が呼び出されるファイルであることをサーバーが理解するために、おそらく他のルールが必要になるでしょう。

したがって、おそらく次のような2番目のルール

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

更新された回答で、www.example.com から example.com にリダイレクトしようとしていることに気付きました。1 つのドメインを強制したい場合は、次のように他のルールの前に .htaccess に別のルールを追加する必要があります。

RewriteCond %{HTTP_HOST} ^www.example.com$
Rewrite Rule ^(.*)$ http://example.com/$1 [L,R=301]
于 2012-09-05T15:02:31.440 に答える
0

xampp/apache/conf/httpd.confを開くことができます

その後、以下の行を確認してください

#LoadModule rewrite_module modules/mod_rewrite.so

行の上にハッシュ (#) が存在する場合。それを削除します。

LoadModule rewrite_module modules/mod_rewrite.so

Apacheサーバーを再起動して、サイトを確認してください。

その後、サイトが機能しなくなりましたのでお知らせください。

于 2012-09-05T15:04:07.117 に答える