適切に書かれた.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 フォルダーに追加のルールを作成しました。