Как перенаправить на динамический контент с помощью .htaccess

Теперь, когда я знаю, как писать дружественные ссылки для SEO, у меня есть эта проблема: если я собираюсь использовать заголовок записи в URL-адресе, тогда ссылки будут сломаны, если я обновлю этот заголовок.

Теперь я вижу, что этот сайт решил это так: http://stackoverflow.com/questions/123456/any-title-name

Они помещают идентификатор в URL-адрес, а заголовок в другое место не имеет значения, потому что, если какой-либо пользователь изменяет это название, сервер перенаправит его на исходный заголовок. Например:

  • Если пользователь вводит: http://stackoverflow.com/questions/123456/i-changed-that-name-lol
  • Сервер перенаправляет на: http://stackoverflow.com/questions/123456/any-title-name

Проблема в том, что вы не можете указать это вручную, используя только регулярные выражения .htaccess , потому что вам нужно подключиться к базе данных, чтобы получить исходный заголовок. Как это перенаправление сделано?

Вы правы, что это невозможно сделать через .htaccess. Существует способ сделать подключение к базе данных через Apache, но я не думаю, что это можно сопоставить с текущим заголовком в URL-адресе. Это означает, что, скорее всего, скрипт запрашивает базу данных и отправляет заголовок перенаправления обратно клиенту.

В php вы можете использовать функцию header(...) . С Apache и php вы получите код, который выглядит так:

 <?php $matches = Array(); preg_match("/^\/questions/([0-9]+)\/([^\/]+)$/", $_SERVER['REQUEST_URI'], $matches); $db = new Database(); $seo_title = $db->getTitleById( $matches[1] ); if( $seo_title != $matches[2] ) { header( "Location: /questions/{$matches[1]}/{$seo_title}", TRUE, 301 ); exit(); } else { display_the_page(); }