У меня не может быть больше определенного количества перенаправлений, использующих htaccess? - PullRequest
1 голос
/ 10 марта 2010

Я зарегистрировал 3 домена, все для одного сайта. Я сделал это, чтобы поймать людей, которые не могут вспомнить правильный URL. Итак, у меня есть:

  1. domain.com.au
  2. domain.org
  3. domain.org.au

Хостинг находится под № 1, с № 2 и № 3 в качестве припаркованных доменов.

  • Я хочу, чтобы всех направили на # 3 (domain.org.au), потому что это сайт для некоммерческой благотворительности в Австралии.
  • Я использую Wordpress. В настройках администратора Wordpress я сделал сайт видимым в корне домена, который создал два файла .htaccess: один в корне и один в папке wordpress.
  • Файл, который я редактирую, находится в корне, и в настоящее время выглядит так:
 
    # BEGIN WordPress
    IfModule mod_rewrite.c> # deliberate missing open tag to show this line here
    RewriteEngine On
    RewriteBase /                       # from Wordpress
    RewriteCond %{REQUEST_FILENAME} !-f # from Wordpress
    RewriteCond %{REQUEST_FILENAME} !-d # from Wordpress
    RewriteRule . /index.php [L]        # from Wordpress
    # Point all domains to .org.au
    RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com\.au [NC]
    RewriteRule ^(.*)$ http://domain.org.au/$1 [R=301,L]
    # RewriteCond %{HTTP_HOST} ^(www\.)?domain\.org [NC]
    # RewriteRule ^(.*)$ http://domain.org.au/$1 [R=301,L] 
    /IfModule> # deliberate missing close tag to show this line here    
    # END WordPress

Мой первый редирект работает нормально, но когда я добавляю .org -> .org.au, браузер задыхается и говорит, что у меня много перенаправлений Это возможно, это мой первый набег на .htaccess. Итак - что я делаю не так?

1 Ответ

2 голосов
/ 10 марта 2010

Ваш второй RewriteCond только проверяет, начинается ли имя хоста с (www.)domain.org, поэтому после перенаправления он будет совпадать с domain.org.au. Это приведет к бесконечному количеству перенаправлений, в результате чего ваш браузер сдается после определенного количества попыток.

Что вам действительно нужно, это сопоставить (www.)domain.org(END). Знак доллара $ представляет конец строки в регулярных выражениях, например:

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com\.au$ [NC]
RewriteRule ^(.*)$ http://domain.org.au/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.org$ [NC]
RewriteRule ^(.*)$ http://domain.org.au/$1 [R=301,L]

Выражение ^(www\.)?domain\.com\.au$ работает так:

  • ^ = начало строки
  • (www\.) = "www." как группа
  • ? = предыдущая группа либо один, либо ноль раз
  • domain\.com\.au = domain.com.au (точки обычно означают «любой символ», но не в том случае, если им предшествует обратный слеш)
  • $ = конец строки

Итак, все выражение означает:

точно "domain.com.au" и никаких других символов, необязательно предшествующих "www."

...