Нужны инструкции по переписыванию конкретных URL - PullRequest
4 голосов
/ 22 июня 2011

Я изменил CMS на свой сайт, и он переписал URL-адреса, чтобы сделать их более дружелюбными, но у меня есть 20 страниц, которые связаны с различными сайтами в Интернете. Я хочу, чтобы, когда люди нажимали эти старые ссылки, они перенаправлялись на свои новые соответствующие сообщения.

Сначала я думал об использовании массива PHP с редиректом javascript, но сейчас я думаю, что .htaccess mod-rewrite будет лучшим вариантом.

Каков наилучший способ перенаправления определенных URL-адресов на новые URL-адреса?

Ответы [ 3 ]

3 голосов
/ 22 июня 2011

Используйте файл .htaccess для перенаправлений.Например:

# This allows you to redirect index.html to a specific url
Redirect /index.html http://example.com/location/

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

# Dynamic redirect
RedirectMatch 301 yourUrl/\(.*)\$ http://external.com/someUrl.html?dynamicVal=$1

Это отправит ... yourUrl / 123 -> http://external.com/someUrl.html?dynamicVal=123

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

Если вы говорите о URL-адресах на ваших страницах , то лучший способ - отредактировать все такие страницы с помощью текущих правильных URL-адресов .

Если вы говорите о "что делать, когда кто-то нажимает на мой старый URL (например, из своих закладок или по ссылке на другом сайте), тогда лучше всего перенаправить (с кодом 301) такие запросы в новое местоположение с помощью модуля перезаписи URL-адреса Apache.

Пример:

# Activate Rewrite Engine
RewriteEngine On

# redirect to another page on the same site
RewriteRule ^mypage.php /other/mypage.php [R=301,L,QSA]

# redirect to another page on ANOTHER site
RewriteRule ^mypage.php http://www.anothersite.com/mypage.php [R=301,L,QSA]

Вот ссылка на Руководство Apache по перезаписи мода .

Еще одно полезное место - Форумы Mod_Rewrite .

0 голосов
/ 22 июня 2011

Apache поддерживает различные модули для перезаписи / перенаправления запрошенных URI:

  • mod_alias с Alias и AliasMatch для внутренней перезаписи, а также Redirect и RedirectMatch для внешнего перенаправления
  • mod_rewrite с RewriteRule для внутреннего переписывания и внешнего перенаправления

Основное различие между директивами mod_alias и mod_rewrite заключается в том, что mod_alias *Директивы 1018 * и Redirect работают с шаблонами префиксов пути, в то время как другие директивы (например, AliasMatch, RedirectMatch и RewriteRule) работают с регулярными выражениями.

Шаблон префикса пути всегда всегда соответствуеткогда это квалифицированный префикс запрошенного пути, а остальные сегменты пути автоматически добавляются к целевому пути.Вот пример:

Redirect /foo/bar http://other.example/quux

Если запрашивается /foo/bar, он перенаправляется на http://other.example/quux;аналогично /foo/bar/baz перенаправляется на http://other.example/quux/baz.Alias работает аналогично, но только внутри.

В противоположность этому AliasMatch, RedirectMatch и RewriteRule работают с регулярными выражениями и могут использоваться не только для сопоставления префиксов пути.Вот пример:

RedirectMatch ^/foo/bar$ http://other.example/quux

Если запрашивается /foo/bar, он перенаправляется на http://other.example/quux (так же, как пример Redirect выше).Но если запрашивается /foo/bar/quux, он не перенаправляется, так как ^/foo/bar$ не соответствует /foo/bar/quux.

Дальнейшие различия между mod_alias и mod_rewrite заключаются в том, что mod_rewrite также может проверять другие части URI, кроме путии даже поля заголовка HTTP-запроса.Он также позволяет выполнять более сложные операции с несколькими условиями.

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