0

適切に書かれた.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.com500 Internal Server Error
  • favicon.ico最初のインスタンスでは 404 で返されません。
  • それ以外はすべて機能しますが、改善方法についての推奨事項があれば、よろしくお願いします。

解決:

RedirectMatch私はルールを削除しRedirect 404 /favicon.icoRewriteCond %{REQUEST_FILENAME} !favicon.ico.

管理サブドメインについて: まったく同じルール.htaccessを残しましたが、そこに到達するトラフィックを分類する /admin フォルダーに追加のルールを作成しました。

4

1 に答える 1

0

admin.domain.com - 500 エラー

管理者の書き換えが一致する範囲が広すぎるため、無限ループに陥ります。

RewriteCond %{HTTP_HOST} ^admin\. [NC]
RewriteRule ^(.*)$ /admin/$1 [L]

RewriteCond %{REQUEST_URI} !^/admin [NC]ループを回避する条件を追加してみてください(実際のリクエストが/admin.

RewriteCond %{HTTP_HOST} ^admin\. [NC]
RewriteCond %{REQUEST_URI} !^/admin [NC]
RewriteRule ^(.*)$ /admin/$1 [L]

Favicon.ico

RedirectMatchディレクティブとRedirectディレクティブの両方に、正規表現/パスとリダイレクト URL の 2 つの引数が必要です。ステータス コードはオプションです。理論的には、ルールRedirectMatch 404 favicon.icoは「パスが 404 に一致する場合は favicon.ico にリダイレクトする」と解釈される可能性があります。ディレクティブ ala: にダミーの URL (存在しない) を追加することをお勧めしますRedirect 404 /favicon.ico /dev/null

于 2013-02-21T19:38:50.510 に答える