0

=====説明=====

これに似た投稿には何百もの回答がありますが、人々は問題の一部しかカバーしておらず、私がここで尋ねている実際の問題ではないことに注意してください。

=====

Kohana 3.2を使用していますが、URLからindex.phpを完全に削除したいと思います。たとえば、コントローラーfoo、アクションバーにアクセスしたいとします。

通常、ブートストラップとhtaccessが正しく設定されていれば、次のようにアクセスできます。

www.domain.com/foo/bar。

しかし、私はこのようにアクセスすることもできます:

www.domain.com/index.php/foo/bar

ユーザーが最初の方法のようにのみアクセスできるようにし、2番目の方法のようにはアクセスできないようにします。

私はbootstrap.phpにこのセクションを持っています:

Kohana::init(array(
    'base_url'   => '/',
    'index_file' => '',
));

index_file行を削除して、その値をFALSEに変更しようとしましたが、それでもfoo/barに双方向でアクセスできます。

解決策はhtaccessを変更することだと思いますが、いくつかの変更を試みましたが、希望どおりに機能しません。私はkohanaに付属していたオリジナルのhtaccessを使用しています:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /knisu/

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|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]

どんな助けもいただければ幸いです:)

編集:私はそれを別の投稿で機能させることができる答えを見つけました:

  # Redirect from:
  # http://localhost/index.php/welcome
  # to
  # http://localhost/welcome
  #
  RewriteCond %{REQUEST_FILENAME} -f
  RewriteRule ^index\.php/?(.*)?$ $1 [R,L]

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

問題は、作者は次のように述べています。「これは機能しますが、問題は存在するファイルとdirにあり、画像、css、jsなどの完全なパスを配置する必要があります...後で修正します」

それが最終的な解決策を見つけるのに役立つかもしれませんか?

4

1 に答える 1

0

元のhtaccessを使用する方が良いと思いますが、改善されています。

後に...

RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

これにより、「index.php/」のリダイレクトが行われます。

# Redirect any "index.php/user/profile/" to "/user/profile/"
RewriteRule ^index.php/(.*)$ /$0 [L,R=302]

私の経験では、コントローラーを介して css/js を渡すと、純粋な apache/nginx リクエストよりも遅くなります。

于 2012-07-02T18:05:24.613 に答える