生の URL リクエストを使用していた古いサイトから、CodeIgniter で実装した新しいサイトに URL をリダイレクトしたいと考えています。それらをインデックスページにリダイレクトしたいだけです。また、URL が example.com/this/that のように単純になるように、URL から "index.php" を削除したいと考えています。だから、これは.htaccess
私が作成したファイルです:
RewriteEngine on
Options FollowSymLinks
RewriteBase /
RewriteCond $1 ^assets
RewriteRule ^(.*)$ example/production/$1
RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*)$ index.php? [R=301]
RewriteCond $1 !^(index\.php|example|robots\.txt)
RewriteRule ^(.*)$ index.php/$1
また、私の index.php は実際には へのシンボリック リンクであることにも注意してくださいexample/production/index.php
。
これで、最初のルールは期待どおりに機能します。私のスタイルと画像はすべて問題なく表示されます。2 番目の 2 つのルールで問題が発生しています。2 番目のルールは、基本的にクエリ文字列を破棄し、インデックス ページに (外部から) リダイレクトすることです。だから、私はApacheマニュアルでこれを見つけました:
注: クエリ文字列
パターンはクエリ文字列と照合されません。代わりに、%{QUERY_STRING} 変数で RewriteCond を使用する必要があります。ただし、クエリ文字列部分を含む置換文字列で URL を作成することはできます。置換文字列内で疑問符を使用するだけで、次のテキストをクエリ文字列に再挿入する必要があることを示します。既存のクエリ文字列を消去する場合は、置換文字列を疑問符だけで終了します。新しいクエリ文字列を古いクエリ文字列と組み合わせるには、[QSA] フラグを使用します。
ただし、インデックス ページにリダイレクトする代わりに、古いページの 1 つにアクセスしようとすると、404 ページが見つからないというエラーが発生します。内部リダイレクトにすることで回避策を見つけましたが、外部にリダイレクトしたいと思います。
次の問題、そして私を最も当惑させている問題は、3 番目のルールにあります。私はこれが次のようなことをすることを期待しています。入力すると:
http://example.com/this/thing
私はそれがに再ルーティングされることを期待します
http://example.com/index.php/this/thing
残念ながら、これは機能しません。代わりに、何を入力しても、URL に他に何もないかのように常にインデックス ページにルーティングされます (単に に移動しますhttp://example.com/
)。
さらに、そのルールを次のように置き換えると、さらに混乱します。
RewriteCond $1 !^(index\.php|example|robots\.txt)
RewriteRule ^(.*)$ index.php/this/thing
のような URL を入力すると、期待どおりにhttp://example.com/other/thing
移動しますが、入力すると(私のインデックス ページ) に移動します。私はそれから頭も尻尾も作ることができません。どんな助けでも大歓迎です。http://example.com/index.php/this/thing
http://example.com/this/thing
http://example.com/