適切に書かれた.htaccess
ファイルについて助けが必要です。最善を尽くしましたが、常に期待どおりに機能するとは限りません。私が達成したいのはこれです:
- まず第一に、ブラウザがリクエスト
favicon.ico
した場合、すぐに 404 が返され、例外もリライト/リダイレクトもありません (現在のコードはまだそれをリライトしてから 404 を返します)。 - サブドメインが の場合
admin.
、トラフィックを/admin/
フォルダに書き換え (admin.
URL のまま)、それ以外の場合は に書き換えますwww.
www.
「サブフォルダー」 (例: domain.com/en/sub1/sub2/) であっても、URL がドメインの前にあるかどうかを確認し、そうでない場合はリダイレクトします。- 言語が選択されているかどうかを確認します (en|sl)。それ以外の場合はデフォルト
sl
を選択し、他のリクエストをルート ディレクトリの index.php にリダイレクトします (言語コードが含まれています。例: www.domain.com/en/example/#selection, ?a= b は送信する必要がないため、使用しません)
現在.htaccess
:
Options +FollowSymlinks -Indexes
RewriteEngine on
// this works somewhat (still rewrites 2 times... I can see it in apache log)
RedirectMatch 404 favicon.ico
// this doesn't work at all
Redirect 404 /favicon.ico
RewriteCond %{HTTP_HOST} ^admin\. [NC]
RewriteRule ^(.*)$ /admin/$1 [L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# Check if lang. code is provided otherwise select sl
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(sl|en)/ [NC]
RewriteRule ^(.*)$ /sl/$1 [R,L]
# Add trailing slash if not found
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R,L]
# Process virtual links/directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/?$1 [QSA,L]
問題:
- アクセスする
admin.domain.com
と500 Internal Server Error
、 favicon.ico
最初のインスタンスでは 404 で返されません。- それ以外はすべて機能しますが、改善方法についての推奨事項があれば、よろしくお願いします。
解決:
RedirectMatch
私はルールを削除しRedirect 404 /favicon.ico
てRewriteCond %{REQUEST_FILENAME} !favicon.ico
.
管理サブドメインについて: まったく同じルール.htaccess
を残しましたが、そこに到達するトラフィックを分類する /admin フォルダーに追加のルールを作成しました。