Помогите понять журнал перезаписи (хотите внутренне переписать страницу при запросе от конкретного HTTP_HOST) - PullRequest
1 голос
/ 22 февраля 2011

У меня есть сайт Drupal, site.com , и у нашего клиента есть рекламная кампания, для которой он купил новое доменное имя campaign.com ,Мне бы хотелось, чтобы запрос на campaign.com внутренне переписывался на определенной странице сайта Drupal.Примечание. Drupal использует файл .htaccess в корне документа.

Обычное переписывание Drupal:

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Я добавил следующее перед обычным переписыванием.

# Custom URLS (eg. microsites) go here
RewriteCond %{HTTP_HOST} =campaign.com
RewriteCond %{REQUEST_URI} =/
RewriteRule ^ index.php?q=node/22 [L]

К сожалению, это не работает, просто показывает домашнюю страницу.Включив журнал перезаписи, я получаю следующее.

1. [rid#2da8ea8/initial] (3) [perdir D:/wamp/www/] strip per-dir prefix: D:/wamp/www/ -> 
2. [rid#2da8ea8/initial] (3) [perdir D:/wamp/www/] applying pattern '^' to uri ''
3. [rid#2da8ea8/initial] (2) [perdir D:/wamp/www/] rewrite '' -> 'index.php?q=node/22'
4. [rid#2da8ea8/initial] (3) split uri=index.php?q=node/22 -> uri=index.php, args=q=node/22
5. [rid#2da8ea8/initial] (3) [perdir D:/wamp/www/] add per-dir prefix: index.php -> D:/wamp/www/index.php
6. [rid#2da8ea8/initial] (2) [perdir D:/wamp/www/] strip document_root prefix: D:/wamp/www/index.php -> /index.php
7. [rid#2da8ea8/initial] (1) [perdir D:/wamp/www/] internal redirect with /index.php [INTERNAL REDIRECT]
8. [rid#2da7770/initial/redir#1] (3) [perdir D:/wamp/www/] strip per-dir prefix: D:/wamp/www/index.php -> index.php
9. [rid#2da7770/initial/redir#1] (3) [perdir D:/wamp/www/] applying pattern '^' to uri 'index.php'
10.[rid#2da7770/initial/redir#1] (3) [perdir D:/wamp/www/] strip per-dir prefix: D:/wamp/www/index.php -> index.php
11.[rid#2da7770/initial/redir#1] (3) [perdir D:/wamp/www/] applying pattern '^(.*)$' to uri 'index.php'
12.[rid#2da7770/initial/redir#1] (1) [perdir D:/wamp/www/] pass through D:/wamp/www/index.php

Я не привык к mod_rewrite, поэтому я могу что-то упустить, но сравниваю журналы от вызова до http://site.com/node/3 и от http://campaign.com/ Я не вижу значимой разницы.В частности, uri и args в строке 4 кажутся правильными, internal redirect в строке 7 кажется правильным, а pass through в строке 12 кажется правильным (поскольку файл index.php существует).Но по какой-то причине кажется, что строка запроса была отброшена / проигнорирована во время внутреннего перенаправления.Я полностью в замешательстве.

Кроме того, если кто-нибудь может дать ссылку на понимание журнала перезаписи, это может помочь.Было бы замечательно, если бы был способ отследить строку запроса с помощью внутреннего перенаправления.

FWIW Я использую WampServer 2.1 с Apache 2.2.17.

1 Ответ

1 голос
/ 25 февраля 2011

Спасибо, что задали этот вопрос, это то, что мне нужно сделать тоже. Я не знаю, как сделать это с помощью .htaccess, и надеюсь, что кто-то здесь может ответить на этот вопрос.

Но я делаю то же самое, используя систему меню Drupal с этим кодом в пользовательском модуле:

function mymodule_menu() {
  $items = array();
    $items['domain_redirect'] = array(
    'page callback' => 'domain_redirect',
    'type' => MENU_NORMAL_ITEM,
    'access arguments' => array('access content'),
   );
  return $items;
}



function domain_redirect() {

switch ($_SERVER['SERVER_NAME'])
{
  case "campaign.com":
    $goto = "node/22";
  break;
  default:
    $goto = "/";
}

    drupal_goto($goto);
}

Затем установите титульную страницу на domain_redirect.

...