3

サーバーでhtaccessの書き換えが機能しないことに完全に悩まされています。これは Codeigniter 用の基本的な index.php の書き直しであり、Mac での開発では問題なく動作しますが、サーバー (CentOS、Apache 2、WHM) では失敗します。

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

/about/ をロードしようとすると、index.php ページが表示されます。/index.php/about は正しいページを表示します。考えられるすべてのオプションの組み合わせを試しましたが、役に立ちませんでした。私の rewrite.log のサンプルを以下に示します。

[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (3) [per-dir /home/tirius/subdomains/dev/public_html/] add path info postfix: /home/tirius/subdomains/dev/public_html/about -> /home/tirius/subdomains/dev/public_html/about/
[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (3) [per-dir /home/tirius/subdomains/dev/public_html/] strip per-dir prefix: /home/tirius/subdomains/dev/public_html/about/ -> about/
[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (3) [per-dir /home/tirius/subdomains/dev/public_html/] applying pattern '^(.*)$' to uri 'about/'
[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (2) [per-dir /home/tirius/subdomains/dev/public_html/] rewrite about/ -> /index.php/about/
[dev.tirius.co.uk/sid#5d65288][rid#5e37c00/initial] (1) [per-dir /home/tirius/subdomains/dev/public_html/] internal redirect with /index.php/about/ [INTERNAL REDIRECT]
[dev.tirius.co.uk/sid#5d65288][rid#5e3f7c8/initial/redir#1] (3) [per-dir /home/tirius/subdomains/dev/public_html/] add path info postfix: /home/tirius/subdomains/dev/public_html/index.php -> /home/tirius/subdomains/dev/public_html/index.php/about/
[dev.tirius.co.uk/sid#5d65288][rid#5e3f7c8/initial/redir#1] (3) [per-dir /home/tirius/subdomains/dev/public_html/] strip per-dir prefix: /home/tirius/subdomains/dev/public_html/index.php/about/ -> index.php/about/
[dev.tirius.co.uk/sid#5d65288][rid#5e3f7c8/initial/redir#1] (3) [per-dir /home/tirius/subdomains/dev/public_html/] applying pattern '^(.*)$' to uri 'index.php/about/'
[dev.tirius.co.uk/sid#5d65288][rid#5e3f7c8/initial/redir#1] (1) [per-dir /home/tirius/subdomains/dev/public_html/] pass through /home/tirius/subdomains/dev/public_html/index.php

ご覧のとおり、htaccess が取得され、mod_rewrite が有効になって動作していますが、index.php には何も追加されていないようです。

これはApacheの構成の問題に違いありませんが、それが何であるかについては本当に迷っています。

httpd.conf からのサンプル

<Directory "/">
    Options ExecCGI FollowSymLinks IncludesNOEXEC Indexes MultiViews SymLinksIfOwnerMatch
    AllowOverride All
</Directory>
4

1 に答える 1

1

これは、CentOS での私の .htaccess です。

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

スラッシュの前の疑問符に注意してください。

この理由は、PHP を FastCGI として実行することに関係していると思います。クエスチョンマークは前の文字をオプションにすると思います (つまり、index.ph にも一致します)。私はこれをもう少し調査しようとしましたが、決定的な理由を見つけることができませんでした。探しているときに見つけたリライタルールのすべてのバリエーションを試しただけで、なぜそれが機能するのかをわざわざ尋ねなかったと思います。

お役に立ててうれしいです。

于 2012-07-27T08:46:22.710 に答える