1

これを行いたい: (まず、ci は私の codeigniter フォルダーです)
ユーザーが ci/2012.htm を呼び出した場合、ci/oyna/oyun/2012.htm をリダイレクトしたい これを使用しようとしていますが、実行されていません。

    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    RewriteRule ^(.*)$ index.php/oyna/oyun/$1 [L,QSA]

ci/2012.htm を呼び出すと、codeigniter 404 not found page が返されます。

4

1 に答える 1

1

初め; 作成している書き換えに対して競合する 2 つの書き換え規則があります。

RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteRule ^(.*)$ index.php/oyna/oyun/$1 [L,QSA]

Lフラグは、ルールが一致した場合、次のルールが使用されないことを示します。2012.htmは最初のルールに一致するため (両方のルールがすべてに一致する)、書き換えられてそこでindex.php/2012.htm停止し、oyna/oyun の書き換えに到達することさえありません。

解決策は、ルールを交換し、.htm ファイルのみを書き換えるように .htm 書き換えをより具体的にすることです。ルールを次のように変更します。

RewriteRule ^(.*\.htm)$ index.php/oyna/oyun/$1 [L,QSA]

うまくいくはずです。

最も選択的なルールを最初に配置した後の結果は、次のようになります (untested, no apache here)

編集:不足している RewriteCond を追加しました。RewriteRule ごとに 1 つ必要です。

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*\.htm)$ index.php/oyna/oyun/$1 [L,QSA]
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
于 2012-09-08T14:31:05.537 に答える