WordPress Правила переписывания мультисайтов - PullRequest
1 голос
/ 01 июня 2011

Я использую Wordpress 3.1 с поддержкой нескольких сайтов.У меня есть несколько веб-сайтов с общим файлом .htaccess в корневом веб-каталоге.Я использую RewriteCond для нацеливания на определенные веб-сайты и применения RewriteRules к каждому сайту.К сожалению, это не работает, как ожидалось.Вот что у меня есть в моем файле .htaccess:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# Blog1 Rewrite Rules which should only apply to blog1.mydomain.com
RewriteCond %{HTTP_HOST} ^blog1\.mydomain\.com [nc]
RewriteRule ^fileabc\.jpg$ http://blog1.mydomain.com/files/2011/05/fileabc.jpg [R=301,NC,L]
RewriteRule ^filexyz\.pdf$ http://blog1.mydomain.com/wp-content/themes/blog1Theme/Files/filexyz.pdf [R=301,NC,L]

# Blog2 Rewrite Riles which should only apply to blog2.com
RewriteCond %{HTTP_HOST} ^Blog2\.com [nc]
RewriteRule ^index\.html$ http://Blog2.com/index.php [R=301,NC,L]
RewriteRule ^page\.html$ http://Blog2.com/page/ [R=301,NC,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]

Я использую RewriteCond для нацеливания на определенный сайт (blog1.mydomain.com или blog2.com), и у них есть конкретные RewriteRules для каждого.

Однако ReWriteRules применяются к обоим веб-сайтам (blog1.mydomain.com и blog2.com).

Например:

Доступ к blog1.mydomain.com/fileabc.jpgследует перенаправить на http://blog1.mydomain.com/files/2011/05/fileabc.jpg

Тем не менее, доступ к Blog2.com/fileabc.jpg также перенаправляет на http://blog1.mydomain.com/files/2011/05/fileabc.jpg

, поэтому RewriteRules применяются к обоим (всем) сайтам, а не только куказанные RewriteCond.

Помощь очень ценится!

1 Ответ

2 голосов
/ 01 июня 2011

С Страница Apache

Порядок правил в наборе правил важен, потому что механизм перезаписи обрабатывает их в определенном (не всегда очевидном) порядке, следующим образом:переписать движок в цикле через наборы правил (каждый набор правил состоит из директив RewriteRule, с или без RewriteConds), правило по правилу.Когда конкретное правило соответствует, mod_rewrite также проверяет соответствующие условия (директивы RewriteCond).По историческим причинам условия задаются первыми, что делает поток управления немного затянутым.

Сначала URL сопоставляется с шаблоном правила.Если он не совпадает, mod_rewrite немедленно прекращает обработку этого правила и переходит к следующему правилу.Если шаблон соответствует, mod_rewrite проверяет условия правила.Если их нет, URL будет заменен новой строкой, созданной из строки замещения, и mod_rewrite переходит к следующему правилу.

Теперь ваши правила

RewriteCond %{HTTP_HOST} ^blog1\.mydomain\.com [nc]
RewriteRule ^fileabc\.jpg$ http://blog1.mydomain.com/files/2011/05/fileabc.jpg [R=301,NC,L]
RewriteRule ^filexyz\.pdf$ http://blog1.mydomain.com/wp-content/themes/blog1Theme/Files/filexyz.pdf [R=301,NC,L]

RewriteCond действителен только для первого rewriteRule, следующего сразу за ним, а не для всех правил ниже него. Так что второе rewriteRule будет соответствовать любому домену.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...