MBo

Рейтинг
88
Регистрация
17.04.2008

только что проверил, не передаётся 301 в хедер,

нужно заменить строку

@header("Status: 301 Moved Permanently");

на следующую:

header("HTTP/1.1 301 Moved Permanently");

или

header("HTTP/1.1 301");


Options +FollowSymLinks
RewriteEngine on
RewriteRule ^.htaccess$ - [F]

RewriteRule ^([a-z]+)(-[0-9]{1,3}-)([0-9]{1,7})\.html$ /$1$3.html [R=301,L]

конечно склеит, нет различия в способах инициации редиректа (.htaccess или скрипт),

бот или браузер в обоих случаях получат ответ сервера с заголовками, типа,

HTTP/1.x 301 Moved Permanently

Date: Wed, 12 Aug 2009 14:15:04 GMT

Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4

Location: http://host.com/

Content-Length: 0

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=windows-1251

зацикливание происходит, с index.php на index.php, лучше сделать редирект вот так:

нужно прописать в index.php в самом начале файла, можно сразу после <?php


if($_SERVER['REQUEST_URI']=='/index.php'){header('HTTP/1.x 301 Moved Permanently');header('Location: http://test.com/');exit();}

1) в этом варианте сервер выдаст в хедер код 410 на любые GET запросы


RewriteEngine on
RewriteRule ^.htaccess$ - [F]
RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*) /? [G,L]
ErrorDocument 410 /404.html

2) в этом варианте сервер выдаст в хедер код 410 только на GET запросы /?cat= и /?p=


RewriteEngine on
RewriteRule ^.htaccess$ - [F]
RewriteCond %{QUERY_STRING} (cat|p)=(.*)$
RewriteRule ^(.*) /? [G,L]
ErrorDocument 410 /404.html

3) в этом варианте любые GET запросы средиректятся на главную, сервер выдаст в хедер код 301


RewriteEngine on
RewriteRule ^.htaccess$ - [F]
RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*) /? [R=301,L]

4) в этом варианте средиректятся только GET запросы /?cat= и /?p=, сервер выдаст в хедер код 301


RewriteEngine on
RewriteRule ^.htaccess$ - [F]
RewriteCond %{QUERY_STRING} (cat|p)=(.*)$
RewriteRule ^(.*) /? [R=301,L]

значение кода 410 – урл навсегда удалён с сервера,

значение кода 301 – старый урл навсегда перемещён на новый урл,

в 1 и 2 вариантах редиректов происходить не будет, например, на запрос http://host.com/?cat=12 сервер выдаст в хедер код ошибки 410 и покажет содержимое страницы, прописанной в ErrorDocument 410 /404.html , но в строке браузера урл будет такого вида http://host.com/?cat=12

в 3 и 4 вариантах произойдёт редирект на морду, т.е. при запросе http://host.com/?cat=12 откроется http://host.com/

в этой задаче самое главное передать поисковикам необходимые коды, а редиректить на 404.html не надо, потому что на 404.html сервер отдаст код 200, получится, что все старые страницы переехали на новый урл 404.html

возможное решение, в IE 6 и FF 3 страница редиректится из фрейма на свой урл, в Опере не работает


<script language="javascript" type="text/javascript">
function gH() { top.location="http://host.com/"; }
window.onerror = gH; if (top.location.href != window.location.href) {top.location = "http://host.com/";}
</script>

проверено при таком коде:

<script language="javascript" type="text/javascript">

top.frames=null;self = null;parent = null;top = null;self.ifra.parent = null;

</script>

<iframe src="http://host.com/" width="900" height="600"></iframe>

ещё вариант, в хедере 301


RewriteEngine on
RewriteRule ^.htaccess$ - [F]
RewriteCond %{QUERY_STRING} (cat|p)=(.*)$
RewriteRule ^/?$ /? [R=301,L]

спасибо за иное решение, работает, 301-й добавил и путь от корня:


RewriteRule page1\.php /page2.php?%{QUERY_STRING} [R=301,L]

да не работает, даже со слешем, :)

или у кого-то работает на практике эта строка?

RewriteRule page1.php\?v=(.*) page2.php?v=$1 [L]

Всего: 82