0

私の目標は、マルチドメイン環境でこれを実現するために、URL に www と末尾のスラッシュを強制することです。

http://mydomain.com/company -> http://www.mydomain.com/company/

問題は、特定のサブドメインを www プレフィックスから除外する必要がありますが、次のように末尾のスラッシュを強制することです。

http://m.mydomain.com/company -> http://m.mydomain.com/company/

追加の要因は、複数のリダイレクトを避けるためにサブドメインを維持する必要があることです。例えば:

http://dev.mydomain.com/login -> http://dev.mydomain.com/login/

複数のリダイレクトにより、次のようになります。

http://dev.mydomain.com/login -> http://mydomain.com/login/

ユーザーを現在の開発サイトまたはモバイル サイトに留めておくには、これを避ける必要があります。

私がこれまでに持っているもの:

# Convert http://mydomain.com/company -> http://www.mydomain.com/company/
# Enforce www and trailing slash
# If you have subdomains, you can add them to
# the list using the "|" (OR) regex operator
RewriteCond %{HTTP_HOST} !^(www|dev|m)\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L]

これは、www プレフィックスと末尾のスラッシュが欠落しているドメインで機能し、1 つのリダイレクトで両方を追加します。

# Convert http://mydomain.com/company/ -> http://www.mydomain.com/company/
# Enforce www
# If you have subdomains, you can add them to
# the list using the "|" (OR) regex operator
RewriteCond %{HTTP_HOST} !^(www|dev|m)\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

これは、末尾のスラッシュが存在する場合に機能し、欠落している場合は www プレフィックスを追加します。

私が理解できないのは、サブドメインが存在し、末尾のスラッシュがない場合にユーザーをリダイレクトする方法です。

RewriteCond %{QUERY_STRING} ^$    [NC]
RewriteRule ^((.*/)?[^/\.]+)$ /$1/ [R=301,L]

このルールは、末尾にスラッシュを追加するために機能しますが、サブ ドメインをルート ドメインにリダイレクトします。

これらのルールを可能な限り少数のオプションにまとめながら、私の目標を達成し、複数のリダイレクトを回避するソリューションをお勧めできますか?

4

1 に答える 1

1

ディレクティブの場合RewriteRule、パターンは要求に対応するファイル システム パスと照合されます。したがってRewriteCond、パスの代わりに URL を生成するために、適切な変数で a を使用するか、置換を構築するときに適切な変数を使用してください。

やってみました

RewriteCond %{QUERY_STRING} ^$    [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^((.*/)?[^/\.]+)$ http%1://%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L]

これは、他の 2 つのルールと最も同期している定式化である必要があります。ただし、それに条件を追加する必要があります。

于 2012-12-13T19:51:46.653 に答える