0

生の 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/thinghttp://example.com/this/thinghttp://example.com/

4

2 に答える 2

1

うーん-これもうまくいかないようです。問題は、私のURLがファイル名やディレクトリを実際に要求していないことです。例:example.com/index.php/this/thingは、「this」コントローラーの「thing」メソッドを呼び出す必要があります。–スティーブンオクスリー

条件は次のとおりです。リクエストがファイルでもディレクトリでもない場合、それは正しかったので、リクエスト文字列の追加を組み合わせる必要があります。

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
于 2009-06-18T10:22:04.657 に答える
1

これにより、index.php の問題が解決され、robots.txt が利用可能かどうかが検出されます。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
于 2008-12-18T08:49:32.690 に答える