0

私は、codeigniter URL で index.php を削除するためにインターネット全体で提案されている次の htaccess ルールを使用しています。そして、その上に追加したリダイレクト ルールがいくつかあります。

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

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

問題は、上記の htaccess ルールが原因であると思われる奇妙な http リクエストを受け取っていることです。ここにそれらのいくつかがあります:

https://www.sitename.com/index.php/favicon.ico これは .com/favicon.ico である必要があります

https://www.sitename.com/index.php/scripts/jquery.js これは .com/public/jquery.js である必要があり ます。補足として、base タグを使用してアセットを /public/ にリダイレクトします。

奇妙なことに、2 番目のリダイレクトが発生する場所を見つけることができませんでした。サイト全体をテストし、javascript と css ファイルが正しく読み込まれることを確認しました。

コントローラーにこれらのリクエストを無視させることでこのリダイレクトを処理しましたが、少し前に奇妙なエラーが発生しました。私はここで尋ねました: https://stackoverflow.com/questions/11775849/htaccess-didnt-work-until-renaming-and-then-renaming-back

私の推測では、誤ってリダイレクトされたリクエストを無視しても、ホスティング会社はそれらを受け取り、ホスティング会社のメンテナンスによってリンクされた質問で共有された問題につながった可能性があります。

とにかく、質問: htaccess ルールで、最後にファイル拡張子を持たないリクエストのみをリダイレクトするにはどうすればよいですか?

4

1 に答える 1

1

行の前に行がありませんREQUEST_FILENAME:

 RewriteCond $1 !^(index\.php|assets|something|fav\.ico|robots\.txt)

これは、必要に応じて変更できます。フォルダにJS/CSSなどを入れているassetsので、書き換えの影響はありません。

したがって、全体は次の.htaccessようになります。

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond $1 !^(index\.php|assets|something|fav\.ico|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L] 
于 2012-08-06T13:19:10.427 に答える