Запрет в htaccess на несуществующие урлы

12
M
На сайте с 17.08.2008
Offline
83
#11
siv1987:
ТС, можете попробовать (выбрать один вариант)
для страницы ошибки

RewriteEngine On
RewriteCond %{QUERY_STRING} !^name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+$
RewriteCond %{QUERY_STRING} !^name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+&pid=\d+$
RewriteRule ^index\.php 404.html [G,L]

для редиректа

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+&pid=\d+).
RewriteRule ^index\.php /index.php?%1 [R=301,L]
RewriteCond %{QUERY_STRING} !^name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+&pid=\d+$
RewriteCond %{QUERY_STRING} ^(name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+).
RewriteRule ^index\.php /index.php?%1 [R=301,L]

Немного видоизменил первый вариант, получилось:

RewriteEngine On

RewriteCond %{QUERY_STRING} !^name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+$

RewriteCond %{QUERY_STRING} !^name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+&pid=\d+$

RewriteRule ^index\.php /404.html?%1 [R=301,L]

Теперь на кардинально не верных урлах (по крайней мере которые есть в индексе ПС), вроде как выдается 404 ошибка на отдельной странице. Т.е. ГУД! Синтаксис правильный получился, оставлять на сайте такое можно?

Не пойму логику скрипта у переменных name и op - и там, и там прописаны одинаковые параметры [a-zA-Z], однако если в правильном урле, например:

index.php?name=Pages&op=cat&id=10

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

index.php?name=Pagtttes&op=cat&id=10 - редирект на 404, т.е. ОК

index.php?name=Pages&op=ctttat&id=10 - урл остается тем же, содержание страницы меняется на содержание главной, редеректа не происходит, т.е. не айс

Или вот еще например, с id и pid:

index.php?name=Pages&op=page&id=9&pid=1204 - страница детального описания

Если добавить в текущий урл цифры в переменные, то получим:

index.php?name=Pages&op=page&id=9&pid=12041111 - такой записи не существует, 404 ошибка - ОК

index.php?name=Pages&op=page&id=91111&pid=1204 - ошибка не показывается, редирект не происходит, выдается содержание этого же (исходного) детального описания - не айс

Почему так?

И еще момент с текущим исходным урлом - index.php?name=Pages&op=cat&id=33

Если продлить id на несуществующий, например:

index.php?name=Pages&op=cat&id=331111 - то урл сохраняется тот же в строке браузера, содержание как бы раздела, но с параметрами нулевыми, т.е. (постараюсь объяснить), шаблон выводится, а содержание передаваемых переменных, как бы пустое.

Такое можно как-то учесть в скрипте?

siv1987
На сайте с 02.04.2009
Offline
427
#12
Немного видоизменил первый вариант, получилось:
Теперь на кардинально не верных урлах (по крайней мере которые есть в индексе ПС), вроде как выдается 404 ошибка на отдельной странице. Т.е. ГУД!

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

M
На сайте с 17.08.2008
Offline
83
#13
siv1987:
Не надо менять, получилось то что вы делаете 301 первый редирект. Это еще хорошо если ваша страница будет отдавать 404 код, а она судя по расширению отдавать не может. Самый лучший вариант оставить как я написал.

Тогда с главной страницы скидывает на ошибку 410 (так пишет):

Resource is no longer available!

The requested URL is no longer available on this server and there is no forwarding address. Please inform the author of the referring page that the link is outdated.

If you think this is a server error, please contact the webmaster.
Error 410

В смысле, при Вашем исходном варианте.

siv1987
На сайте с 02.04.2009
Offline
427
#14
Тогда с главной страницы скидывает на ошибку 410 (так пишет):

Ну в принципе да, отдается дефолтная страница сервера при 410 Gone.

Если хотите чтобы показывалась ваша 404 страница, тогда придется поменять расширение с html на php, и отдавать в нем заголовки 404 или 410. А флаг G из реврайта удалить. Так уже можете делать и редирект на этот файл

M
На сайте с 17.08.2008
Offline
83
#15
siv1987:
Ну в принципе да, отдается дефолтная страница сервера при 410 Gone.

В смысле, введя в строке www.site.ru выдается 410 ошибка - это же не правильно и здесь нужно отдавать пользователю содержание страницы, а не страницу ошибки (410 или 404). Главная страница существует и должна открываться.

siv1987
На сайте с 02.04.2009
Offline
427
#16
Midnik:
выдается 410 ошибка - это же не правильно и здесь нужно отдавать пользователю содержание страницы, а не страницу ошибки (410 или 404). Главная страница существует и должна открываться.

В этом смысле тогда нужно добавить еще одно условие RewriteCond, на то что QUERY_STRING не пустой, и этот смысл не имеет отношения к предыдущему сообщению.

M
На сайте с 17.08.2008
Offline
83
#17

Правильно ли я Васпонял, исходя из последних двух сообщений, что можно сделать так:

RewriteEngine On
RewriteCond %{QUERY_STRING} !^name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+$
RewriteCond %{QUERY_STRING} !^name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+&pid=\d+$
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^index\.php /404.php?%1 [R=301,L]

ErrorDocument 404 /404.php

и так:

RewriteEngine On
RewriteCond %{QUERY_STRING} !^name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+$
RewriteCond %{QUERY_STRING} !^name=[a-zA-Z]+&op=[a-zA-Z]+&id=\d+&pid=\d+$
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^index\.php /404.php [L]

ErrorDocument 404 /404.php

Оба варианта будут правильными?

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#18

1 вариант - говорим клиенту, что страница переехала постоянно на новый адрес

2 вариант - говорим что эта страница умерла, но есть другая, получше:)

Подпись))
M
На сайте с 17.08.2008
Offline
83
#19

Ясно, будем смотреть как оценят это ПС.

siv1987 и Милованов Ю.С спасибо Вам большое за помощь!

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий