2

私は.htaccessで次のことを達成しようとしています:

  1. wwwをwww以外にリダイレクトする
  2. 要求されたパスを保持します(例domain.com/path/to/file.php
  3. クエリ文字列がある場合はそれを保持します(例domain.com/path/to/file.php?key=val&key2=val2
  4. 要求されたプロトコル(httpまたはhttpsのいずれか)を保持します

私はこのコードを試しました:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

ただし、http / httpsを尊重せず、要求されたパスを保持しません(たとえば、リダイレクトhttps://www.domain.com/path/file.phpするhttp://domain.com/file.php必要があるときににリダイレクトしhttps://domain.com/path/file.phpます)。

何か案は?

4

1 に答える 1

4

リクエストが http か https かを確認し、正しいプロトコルにリダイレクトする必要があります。現在、すべてを にリダイレクトしていますhttp://。この条件とグループ化を使用できます。

RewriteCond %{HTTPS}:s (on:(s)|off:s)

これは、%{HTTPS}「on」または「off」のいずれかである変数を使用し、s. on:(s)次に、 または のいずれかに一致しますoff:s。したがって、HTTPS が「オン」の場合、(s)はグループ化され、 を使用して後方参照できます%2。それ以外の場合、HTTPS が「オフ」の場合、何もグループ化されず、%2空白になります。その後、リダイレクトで使用できます。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
RewriteCond %{HTTPS}:s (on:(s)|off:s)
RewriteRule ^(.*)$ http%2://domain.com/$1 [R=301,L]

保存されていないパスに関する 2 番目のことについては、ルールがディレクトリ/pathにあるように聞こえます。これは、これらのルールを介して送信されるときに削除されることを意味します。それらをドキュメント ルートに移動する必要があります。または、ディレクトリにルールが必要な場合は、代わりに変数を使用できます。/path%{REQUEST_URI}

RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
RewriteCond %{HTTPS}:s (on:(s)|off:s)
RewriteRule ^ http%2://domain.com%{REQUEST_URI} [R=301,L]
于 2013-01-18T19:24:29.970 に答える