Переадресация htaccess vs php

Я решил изменить все мои страницы /dyanmic.php?UID=... на /static/Name-From-DB. Я читал, что лучший способ перенаправления, SEO мудрый, заключается в реализации перенаправления 301.htacess:

(http://www.tamingthebeast.net) - Правильный путь - htaccess 301 Перенаправление: перенаправление 301 эффективный и удобный для пауков/посетителей стратегии для веб-сайтов, которые размещаются на серверах под управлением Apache.

Однако, поскольку у меня есть тысячи страниц, для которых мне нужно использовать перенаправление, кажется довольно неэффективным иметь тысячи записей в файле .htacess:

redirect 301 /dynamid.php?UID=1 http://www.domain.com/static/Name-From-DB
redirect 301 /dynamid.php?UID=2 http://www.domain.com/static/Another-Name-From-DB
and so on...

Поэтому кажется, что эффективный способ сделать это - через страницу PHP, настроив заголовок на 301 переадресацию в соответствии с UID:

<?
Header( "HTTP/1.1 301 Moved Permanently" ); 
// Getting the page static name from the DB according to the UID
$result = mysql_query('SELECT Name FROM DB WHERE UID='$_GET["uid"]'');
$row=mysql_fetch_assoc($result);
// Redirect to the new page
Header( "Location: http://www.domain.com/static/" . $row[0] ); 
?> 

Мой вопрос в том, будет ли этот метод отрицательным образом влиять на ранжирование моих страниц, учитывая приведенный выше параграф, что лучший способ сделать перенаправление - через .htaccess.

Спасибо!

Ответ 1

Те же заголовки будут отправлены одинаково, как вы это делаете. Поэтому для пользователя (или для поисковой системы) он не будет отличаться, поэтому PHP не будет отрицательно влиять на ваш ранг страницы по сравнению с способом .htaccess.

Путь PHP будет немного медленнее, так как каждый раз, когда страница обращается к запросу базы данных, запускается. Если на сайте не слишком много трафика на эти страницы, это не должно быть проблемой.

На вашей странице PHP сначала подключайтесь к базе данных, потому что, если страница не существует, вам нужно либо перенаправить ее на другую страницу, либо передать заголовки ошибок 404 вместо заголовка 301.

Ответ 2

Мой вопрос в том, будет ли этот метод отрицательным образом влиять на ранжирование моих страниц, учитывая приведенный выше параграф, что лучший способ сделать перенаправление - через .htaccess.

Нет, он не предусматривает, что вы правильно реализуете перенаправление в своем PHP файле! Вы должны, вероятно, искать Name (uid) перед выпуском заголовка 301 (и вызывать это только при обнаружении Name — в противном случае это a 404).

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


Изменить — псевдокод

str ← ""
for each (uid, Name) in database:
    line ← concat("Redirect 301 /dynamid.php?UID=", uid, "http://www.domain.com/static/", Name, <newline>)
    append line to str
copy or write str to .htaccess

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

Ответ 3

Нет. В обоих случаях клиент видит одно и то же: перенаправление 301. Единственная разница может быть задержка, так как .htaccess обрабатывается перед php файлом, а запрос sql может добавить некоторую задержку, но я думаю, что задержка незначительно мала.

Ответ 4

Это не повлияет на ваш pageranking - Google ценит, когда вы сообщаете им, что ваши страницы переместились, и что вы не будете поддерживать свой сайт с дублирующимся контентом.

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

Путем ручной переадресации в .htaccess вы фактически даете себе больше работы, чем необходимо при сравнении с динамическим добавлением заголовков через ваш PHP при необходимости.

Ответ 5

... лучший способ сделать перенаправление - через .htaccess...

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

Не только это, но, если вы находитесь на нескольких уровнях, он проверяет файлы .htaccess во всех родительских каталогах. Итак, если ваш файл находится в доме /dir 1/dir2/dir3, он будет проверять файлы .htaccess в каждом каталоге с каждым доступом к файлу:
home/dir1/dir2/dir3/
home/dir1/dir2/
home/dir1/
главная /

Лучше всего держать его как можно более легким. Если вы не используете общий сервер, вам не следует использовать файлы .htaccess. Введите любые директивы в основной файл конфигурации в разделе "Каталог" и установите AllowOverride в "none".