Как я могу сопоставить www и non-www в перезапись? - PullRequest
8 голосов
/ 31 декабря 2010

У меня есть карта перезаписи, содержащая список доменов для перенаправления. В настоящее время я должен перечислить www.foo.com и foo.com на карте переписывания. Мне было интересно, есть ли способ сделать проверку перезаписи второй и для www и не www в одной строке.

# Rewrite Map
foo.com file.php
www.foo.com file.php

# modrewrite
RewriteCond ${domainmappings:%{HTTP_HOST}} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ www.domain.com/%1 [L,R=301]

Я пытался сделать что-то вроде (www.)% {HTTP_HOST} или ^ (www.)% {HTTP_HOST}, но безуспешно.

Ответы [ 4 ]

16 голосов
/ 31 декабря 2010

Это должно сделать это:

RewriteCond %{HTTP_HOST} ^(www\.)?(.+)
RewriteCond ${domainmappings:%2} ^(.+)$ [NC]
RewriteRule ^ /%1 [L,R=301]

Первый RewriteCond удалит необязательный префикс www..Остаток затем используется в качестве параметра для карты перезаписи во второй RewriteCond.

Карта перезаписи простого текстового файла возвращает пустую строку, если совпадение не найдено:

Еслиключ найден, конструкция функции карты заменена на SubstValue .Если ключ не найден, он заменяется DefaultValue или пустой строкой, если не было указано DefaultValue .

Так что, если второе условиевыполнено (обратите внимание на ^(.+)$), совпадение найдено, и %1 будет содержать SubstValue (в данном случае file.php).

5 голосов
/ 31 декабря 2010

Из поста здесь

http://www.eukhost.com/forums/f15/simple-rewriterule-set-redirect-domain-6570/

RewriteEngine on
RewriteCond %{HTTP_HOST} ^xyz.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.xyz.com$
RewriteRule ^(.*)$ http://www.xyz.com/test//$1 [R=301,L]
0 голосов
/ 21 апреля 2016
RewriteCond %{HTTPS} off

RewriteCond %{HTTP_HOST} ^domain.com$ [OR]

RewriteCond %{HTTP_HOST} ^www.domain.com$

RewriteRule ^ https://www.domain.com%{REQUEST_URI} [R=301,L]
0 голосов
/ 31 декабря 2010

Вы можете попробовать сделать www.необязательная часть со следующим:

# Rewrite Map
www.foo.com file.php

# modrewrite

# redirect to www domain always
RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)$
RewriteRule (.*) http://www\.%1/$1 [L,R=301,QSA)

# redirect following the map
RewriteCond ${domainmappings:%{HTTP_HOST}} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ www.domain.com/%1 [L,R=301]

Это сначала перенаправит anything.anything на www.anything.anything, а затем применит ваше правило к следующему запросу.Не слишком хорошо разбирается в картах переписывания, хотя и не дает никаких гарантий.

...