Внешние ссылки с большой буквы на новый сайт Drupal получают 404 - PullRequest
2 голосов
/ 21 декабря 2011

У меня довольно большой сайт, на котором у создателей сайта все внутренние пути автоматически устанавливаются в нижний регистр (на самих страницах, в меню и т. Д.).На данный момент у нас есть другие сайты, ссылающиеся на старую (заглавную) версию от нескольких сотен до, возможно, более 1000 узлов в новой версии сайта D7.

Так что ссылка на http://www.example.com/alzheimers работает нормально, но если я вручную введу http://www.example.com/Alzheimers, я попаду на наш пользовательский 404 (с нашей темой Drupal, показывающей сообщение).Это проблема, так как это сайт высокой видимости с большим количеством внешних ссылок на старые URL-адреса.

Строители сайтов также пытались вручную ввести перенаправление /Alzheimers/alzheimers, и, конечно, это создало бесконечный цикл перенаправления, черную дыру, войну зомби и т. Д.

IПопытка справиться с этим с Apache "mod_speling", но безуспешно, хотя у меня нет большого опыта работы с этим модом.Мне интересно, если я что-то упускаю / нужно ли конкретное правило для изменения заглавных букв?Следуя инструкциям, я включил мод и перезапустил Apache.Это не помогло.

Поэтому мне интересно, нужно ли мне подключиться к теме (hook_init?), Чтобы захватить запрошенный URL-адрес и добавить немного PHP, чтобы просто установить строку на более низкое.Есть идеи?У меня нет проблем с его кодированием, но если есть более простой способ справиться с этим, любая помощь будет принята с благодарностью.

Поскольку это типичная проблема для любого сайта, написанного для Windows и переведенного на Drupal или LAMP в целом, я не могу быть первым человеком, которому нужно исправить это.

Если нужен специальный код Drupal, где лучше всего его подключить для чего-то подобного?

1 Ответ

1 голос
/ 21 декабря 2011

Я думаю, что hook_init() будет вызвано слишком поздно в процессе (начальная загрузка уже выполнена и путь к этому моменту разрешен).Возможно, вы захотите попробовать hook_boot() вместо:

function mymodule_boot() {
  $_GET['q'] = strtolower($_GET['q']);
}

После установки модуля откройте таблицу system и установите для столбца weight для вашего модуля значение -1, чтобы обеспечитьhook вызывается перед хуками любых других модулей.Затем очистите кеши Drupal, и все будет хорошо.

Но будьте осторожны, поисковые системы увидят http://www.example.com/alzheimers и http://www.example.com/Alzheimers как две отдельные страницы с дублированным контентом.В идеале вы хотели бы сделать редирект 301 со старой страницы на новую, но это было бы намного сложнее и (я думаю) потребовало бы реализации hook_url_inbound_alter.

...