Страницу 404 я сделал отдельную и если адрес введен неверно то она и загружается и 404 выдается. Но скрипт так устроен, что иногда на 404.htm не идет редирект, а загружается просто пустая страница, там я пишу что нет информации и хочу выдавать код ошибки, и меня интересует какой код выдавать, не будет ли так что если 404 выдавать то бот туда больше не зайдет, когда информация там появится.
Систему эту я не сам писал, так как разбираюсь в PHP не очень хорошо. Там ситуация такая, что ID равны только числу, если букву написать то будет ошибка 404 (и это правильно), а если число написать, которое не соответствует зарегестрированному юзеру (т.е. его еще нет, но может потом появиться под этим ID), то появляется пустая страница, где абсолютно ничего нет. И теоретически таких пустых страниц может быть хоть сотни.
Я знаю что поисковики выкидывают из базы страницы сайтов УРЛ которых имеют несколько видов, т.е. дублей. Но я боюсь что может быть такое, что когда большое количество пустых страниц тоже могут последовать какие-нибудь санкции. Ведь контент у них один и тот же (пустой) а УРЛ все разные. Поэтому я и хотел 404 поставить. Кто-нибудь может прокоментировать это, стоит ли заморачиваться?
В общем, нашел я причину почему не перенапрявлялось с конкретного слова на конкретное слово: оказывается... вот пример приведу
RewriteRule ^(Close)[/]?$ /input.php?Action=Close [L]
Так вот, эта запись неправильна, слово Close, которое в скобках, должно быть написано с маленькой буквы, а в браузере можно писать и с большой. По крайней мере у меня так. Теперь все так и буду делать, т.к. по другому никак не получается.
Вышеперечисленные конструкции тоже не помогают. Я решил проверить на отдельном примере, в чистом .htaccess файле, работают ли перенаправления на моем Дэнвере, оказывается все работает. Получается проблема в том что у меня много строк в этом файле и что-то с чем то конфликтует. Буду пробовать там менять что-нибудь, хотя я это у же делал.
Вот кстати какие там записи:
RewriteEngine on
RewriteBase /
RewriteRule ^([0-9]+)[/]?$ /index.php?ID=$1 [L]
RewriteRule ^([0-9]+)/([0-9]+)[/]?$ /index.php?ID=$1&Name=$2 [L]
RewriteRule ^([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)[/]?$ /index.php?ID=$1&Name=$2&Number3=$3&Number4=$4 [L]
RewriteRule ^([0-9]+)/([0-9]+)/([0-9]+)[/]?$ /index.php?ID=$1&Name=$2&Number3=$3
RewriteRule ^([A-Za-z0-9]+)/([0-9]+)/([0-9]+)[/]?$ /input.php?Action=DelImage&Name=$2&Number3=$3
RewriteRule ^([A-Za-z0-9]+)[/]?$ /input.php?Action=$1 [L]
RewriteRule ^([A-Za-z0-9]+)[/]?$ /input.php?Action=AdminPassword
SiGiN, оказывается нельзя сделать так чтобы с конкретного слова шло перенаправление на конкретное слово, т.е. что-нибудь наподобие такого:
RewriteRule ^(Close)[/]?$ /input.php?Action=Close
Потому что если использовать ([a-z]+), то у меня идет смешивание запросов, т.к. у меня похожих строчек несколько и нельзя их использовать как каждую отдельную, они смешиваются и происходят ошибки. Всяко разно пробовал, и скобки убирал, и без скобок и со скобками, но вышенаписанная конструкция не работает.
SiGiN, было бы что в личку кинуть, я ведь на локальной машине тестирую, в онлайне у меня нет пока ничего. Когда протестирую, тогда и хостинг куплю и залью.
Я впринципе сам процесс-то понимаю что должно куда передавать, но вот почему не передает я не понимаю. У меня такое подозрение, что это все из-за самой системы на которой я все это делаю. У меня Дэнвер стоит, может быть все из-за него. Ладно, буду наверное делать не для всех случаев сразу, а для каждого отдельно, строчек 20-25 получится, надеюсь на производительности это не скажется, только путаница небольшая возникнет.
SiGiN, к сожалению и так не работает. Главное, как только в самом конце $1 заменяю на нужное слово (Close), то сразу работает, ничего понять не могу...
Неужели для каждого слова отдельную строчку писать надо.
Чтобы ветку не открывать новую, здесь хочу еще раз спросить кое что, столкнулся с новой проблемой. Если кто может, помогите.
Есть вот такая строка:
RewriteRule ^([a-z]+)[/]?$ /input.php?Action=Close [L]
Она работает, но после Action встречаются и другие слова, поэтом у я заменил на вот такую строчку:
RewriteRule ^([a-z]+)[/]?$ /input.php?Action=$1 [L]
И она уже не работает. Сделал все точно так же как и предыдущие строчки, которые работают, разница лишь в том что там цифры а здесь буквы. Как правильно написать?
Подозреваю, что проблема может быть в самом конце строчки, этот $1 я все время пишу во всех строчках, может быть правильно в каждой строчки писать разные цифры или нет разницы? Впрочем ставил в конец и другие цифры, все равно не работает.
SiGiN, ага, работает, спасибо.
Cherny, точно, спасибо огромное, заработало.
Только вот вопрос еще один: можно сделать чтоб и со слэшем и без слэшей загружалось? А то сейчас если ставить в конце УРЛ слэш то ошибка вылазит, если в коде подправить и дописать слэш (после круглых скобок), то наоборот со слэшем работает а без него нет.
Saney, про L в конце я знаю, потом допишу, а что вы имели ввиду под "правила в обратном порядке", местами что ли строки поменять?