.htaccess 301 перенаправление одной страницы
После редизайна сайта у меня есть пара страниц, которые нужно перенаправить. Все остается на том же домене, только пара вещей была реорганизована и/или переименована. Они имеют вид:
/contact.php
Теперь:
/contact-us.php
Используя файл .htaccess, я добавил эту строку, которую я нахожу наиболее рекомендуемой:
RedirectMatch 301 /contact.php /contact-us.php
В основном это нормально - он выполняет свою работу - проблема в том, что он также перенаправляет:
- /team1/contact.php
- /non-existant-folder/contact.php
Есть ли способ указать, что я хочу только перенаправить contact.php в корне?
6 answers
RedirectMatch
использует регулярное выражение, сопоставляемое с URL-путем. И ваше регулярное выражение /contact.php
просто означает любой URL-путь, содержащий /contact.php
но не просто любой URL-адрес, который точно /contact.php
. Поэтому используйте якоря для начала и конца строки (^
и $)
:
RedirectMatch 301 ^/contact\.php$ /contact-us.php
Это должно сделать это
RedirectPermanent /contact.php /contact-us.php
redirect 301 /contact.php /contact-us.php
Нет смысла использовать правило redirectmatch, а затем писать свои ссылки так, чтобы они точно совпадали. Если вы не включаете, вам не нужно исключать! Просто используйте перенаправление без совпадения, а затем используйте ссылки в обычном режиме
Вы также можете использовать Рерайтер, если вам нужна возможность сопоставлять шаблоны и перенаправлять URL-адреса.
Если вы предпочитаете использовать простейшее возможное решение проблемы, альтернативой RedirectMatch является более простая директива Redirect.
В нем не используется сопоставление с образцом, поэтому он более понятен и понятен другим.
Т.е.
<IfModule mod_alias.c>
#Repoint old contact page to new contact page:
Redirect 301 /contact.php http://example.com/contact-us.php
</IfModule>
Строки запроса должны быть перенесены, потому что в документах сказано:
Дополнительная информация о пути, выходящая за рамки соответствующего URL-пути, будет добавлена к целевому объекту URL.
Он перенаправит страницу вашего магазина на страницу ваших контактов
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
Redirect 301 http://www.youtdomain.com/store http://www.youtdomain.com/contact
</IfModule>