2

私が取り組んでいる小さなプロジェクトのためにストリップされたフレームワークを作成しましたが、1つの小さな問題を除いて、すべてが順調に進んでいます。

私は次のようなフォルダ構造を持っています:

root
  - app
    - controller
    - views
    - webroot
      - css
      - js
      - img
      - misc
  - config
  - data
  - lib

ルートフォルダに.htaccess、リクエストをフォルダにリダイレクトするファイルがありwebrootます。

RewriteEngine on
RewriteRule     ^$       app/webroot/   [L]
RewriteRule     (.*)    app/webroot/$1  [L]

.htaccessそこに入ると、リクエストがファイルまたはフォルダへの直接リクエストであるかどうかをチェックする別のファイルがあります。そうでない場合は、 :内のindex.phpファイルに渡されます。webroot

RewriteEngine On
RewriteCond     %{REQUEST_FILENAME} !-d
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_FILENAME} !favicon.ico$
RewriteRule     ^(.*)$              index.php?uri=$1        [QSA,L]

私が言ったように、それはすべてうまく機能していますが、1つの小さな問題があります:

をリクエストするhttp://example.com/miscと、アドレスバーのアドレスがに変更されますhttp://example.com/app/webroot/misc/

あなたが要求するときhttp://example.com/misc/、これは起こりません!

重要な点は、プロジェクトの目的のために、人々は「misc」フォルダ内のファイルに直接アクセスする必要があるということです。そこには、理想的にはURLの書き換えがないことindex.htmlを意味するファイルがあります。http://example.com/miscファイルに移動するだけです。私がこれを行う理由は質問にとって重要ではないので、誰かが「フォルダをそのように設定するべきではない」と言う前に、私はそれを行うさまざまな方法を試しましたが、プロジェクトの目的のために、これはそれを行うための最良の方法。

4

1 に答える 1

1

これは mod_dir が行うことなので、要求がディレクトリに対するものであるが末尾のスラッシュが欠落していると判断した場合、末尾のスラッシュでブラウザを 301 リダイレクトします。残念ながら、これが内部 URI の書き換えと関連して発生すると、書き換えられた URI が 301 リダイレクトで混同されるため、公開されます。mod_dir が機能しないように、プリエンプティブ リダイレクトを行う必要があります。

app/webroot/ルールの前にこれを追加してみてください

RewriteCond %{DOCUMENT_ROOT}/app/webroot%{REQUEST_URI} -d
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
于 2012-08-12T16:53:14.963 に答える