1

みなさん、おはようございます。これが簡単なものになることを願っています!(私はまだコーヒーを飲んでいないのに、なぜこんなに早く起きているのですか?!)

とにかく..あなたのために2つのパートがあります: 最初の(基本的な)問題は、リンクからindex.phpを削除しようとしていることです(これは、hostgatorに感謝します:))。たくさんの検索を行った後、/pageが/index.php/pageにリダイレクトされるようになりました。今、これは何もないよりはましですが、もちろんそれでも理想的ではありません。そして、私はそれをするために[R]を使わなければなりませんでした。私の.htaccessは次のとおりです。

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

2番目の(難しい)問題は、URLからindex.phpを削除するために見つける必要がありますが、それでも適切なページコントローラー(つまり、URLに含まれるページ)が表示されていることを確認します。PATH_INFOを使用して変数を取得し、適切なページを表示しています。これは、index.phpが存在する場合に機能します。

しかし、何らかの理由で、最後のRewriteRuleからRを削除すると、/pageは常にデフォルトでメインのindex.phpテンプレートになります。これは、サイトがページを処理する前に、.htaccessなどがPATH_INFOを空に書き換えているようなものです。.htaccessが書き換える前に、 PATH_INFOをロックインする方法が必要だと思います。

いくつかのテストのために私は立ち往生しました、var_dump(path_segments()); そして/index.php/pageにそれが与えるとき:array(2) { [0]=> string(0) "" [1]=> string(10) "proper-page" }。ただし、上記の書き換えルールからRを削除し、/ pageだけでアクセスすると、次のようになります array(2) { [0]=> string(0) "" [1]=> string(0) "" }


今では、最初の問題を簡単に実行する方法があるかどうか、2番目の問題について心配する必要があるかどうかさえわかりません。しかし、少なくともそれが私が今理解しようとしているすべてです。私が得ることができるすべての助けに感謝します!

4

1 に答える 1

3

その場合、2つのオプションがあります。GETパラメータとしてパスを提供するようにリライタルールを調整して、PATH_INFOの使用をスキップします。

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

したがって、$_GET["path"]今すぐ使用してください。

または、使用$_SERVER["PATH_INFO"]を切り替えて、から元の着信パスを取得し$_SERVER["REQUEST_URI"]ます。場合によってはREDIRECT_PATH_INFO、checkなどの代替環境変数もありprint_r($_SERVER);ます。

于 2013-02-23T16:22:25.743 に答える