само название урла 100500 будет формироваться на стороне скрипта, а если будет формироваться, то тогда и урл появиться одинаковый и будете потом думать, а почему вместо старой статьи при полном просмотре я вижу новую!
Борьба с одинаковыми урлами:
1) если сами пишем ЧПУ в форме добавления поста
AJAX-запросом проверяем, есть ли в базе такой ЧПУ и если нет - все ОК, если есть - говорим добавлятелю(админ, редактор, ваш вариант) что измените УРЛ.
2) Если есть механизм, который транслитирует название поста в ЧПУ:
При добавлении в БД также смотрим, есть ли такой ЧПУ уже в базе. Если нет - все ОК, если есть, конкатенируем к названию time() - самый бредовый вариант, который пришел в голову. Так что одинаковость ЧПУ разных записей не проблема, над которой стоит заморачиваться.
Чтобы не делали дубли подставлением GET данных в урл делаем следующее:
if (count($_GET) > Х) { header('http/1.0 404 not found'); }
Х мы берем в зависимости от нашего ЧПУ. В моем варианте 2 параметра - url=$1&rewrite=1, то есть Х будет равен 2
Ladycharm: Не смогу, конечно. Этот подход обработки url полностью исключает формирование дублей внешними факторами.
Разница между Вашим подходом и нашим в масштабируемости, количестве директорий и файлов.
Захотели что-то изменить в структуре вообщем:
у Вас - правим все индексные файлы в папках new, articles, category, ...
у Нас - правиться 1 файл.
Посмотрите ради интереса опенКарт, там как раз все реализовано через 1 индекс.пхп в корне, да и ВП помоему точно также реализован.
WeberSeo: А может вам записать курс по нормальному движку и выложить в сеть? Даже за деньги.
Коллектив серча VS Попов
Потом будет кричать что количеством взяли:)
Идея давно есть в голове, но проблема в том, что у многих людей здесь не найдется на это время. А самому делать это нет особого желания, потому что вдруг что-то упущу:)
ЗЫ. да и начинать это делать с мыслью о перспективе курса оказаться на торент-трэкерах... как-то не стоит.
Ladycharm, чтобы не было злых дублей от конкурентов делаем следующее:
1) В таблицу с постами добавляем регистроЗависимое(ставим правильный коллэйшн) поле `perm_url`
2) В интерфейсе добавления поста добавляем еще 1 инпут и там пишем ЧПУ адрес. Либо же делаем какой-нить механизм(например транслитерация урлов из названия записи).
3) Делаем как писал в предыдущем посте
RewriteEngine On RewriteRule ^articles/([\d\w-]+)\.html articles.php?url=$1?rewrite=1 [L]
4)файл articles.php
if ( !isset($_GET['rewrite']) ) { die('Давай досвидания .!.'); } $sql = "SELECT * FROM `gcms_posts` WHERE `perm_url`='{$_GET['url']}'"; $result = mysql_query($sql); if (mysql_num_rows($result) != 0) { //отдаем контент } else { header('http/1.0 404 not found'); }
Если сделаете www.gs.ru/articles/Кak-sdelat-truE-site.html то получите 404 ошибку, так как поле регистрозависимое.
Сможете в данной ситуации сделать дубли?
На счет:
siv1987: Ок, я создал папку /articles/, создал index.php, я запрашиваю /articles/friendly-url. А теперь вопрос, с какой стати index.php должен отвечать на несуществующий, хз что в данном случае - то-ли файл, то-ли каталог?
Вариант не самый тру. ИМХО
Чем Вам модреврайт не угодил? В вашем случае, если у меня есть статьи, категории, новости придется создавать 3 папки.
А можно через index.php в корне(классика жанра) все это дело разруливать.
ЗЫ. такой вариант очень редко прокатывает(разница 115 лет), потому что за эти 115 лет уже за нас всё 100500 раз придумано, продумано, протестировано, отлажено и нам остается тока взять и заюзать!
Ms-Dred: нормуль платные курсы 😂 Попов там объясняет как собрать очередную гоносистему? Кстати ТС, вот вам пример запроса привели
только не делайте так, хорошо?
1) * - применяется в 2-ух случаях: отладка/тест/разработка, процесс обучения.
2) Данные должны фильтроваться.
Я то дурья голова, решил что Попов об этом рассказывает и ТС зашарит:)
ЗЫ. На счет фильтрации. Она как бэ уже есть в РеврайтРуле, и если это будут не буквы, цифры, тире, то реврайта не будет.
Если есть вариант SQL-injection - просветите.
Есть вариант %39(преобразование в шеснадцатиричное значение), но:
1) Если преобразование будет до моДреврайта, то оно преобразуется в одинарную ковычку и это не попадет под правило, соответственно реврайт не сработает
2) Если преобразование происходит после модРеврайта, то он не пропустит знак %
Я думаю, что преобразование типа urldecode веб-сервер делает до модРеврайта.
Без использования одинарной ковычки Скуля невозможна. Во всяком случае я так считаю. Не прав - просветите:)
WeberSeo: Так значит Попов плохо все делает!?
А есть кто делает правильно и с таким же подробным объяснением?
И всё таки, момент с урлами, что нужно изучить?
Смотрел пару видосов Попова(судьба меня пощадила, и я не платил за них деньги), так вот, основная проблема: он показывает что делать, но не объясняет почему делается так, а не по другому. То есть он показывает частные случаи, и редко когда объясняет сам принцип. ИМХО!
само название урла 100500 будет формироваться на стороне скрипта, а если будет формироваться, то тогда и урл появиться одинаковый и будете потом думать, а почему вместо старой статьи при полном просмотре я вижу новую!
Борьба с одинаковыми урлами:
1) если сами пишем ЧПУ в форме добавления поста
AJAX-запросом проверяем, есть ли в базе такой ЧПУ и если нет - все ОК, если есть - говорим добавлятелю(админ, редактор, ваш вариант) что измените УРЛ.
2) Если есть механизм, который транслитирует название поста в ЧПУ:
При добавлении в БД также смотрим, есть ли такой ЧПУ уже в базе. Если нет - все ОК, если есть, конкатенируем к названию time() - самый бредовый вариант, который пришел в голову. Так что одинаковость ЧПУ разных записей не проблема, над которой стоит заморачиваться.
Чтобы не делали дубли подставлением GET данных в урл делаем следующее:
Х мы берем в зависимости от нашего ЧПУ. В моем варианте 2 параметра - url=$1&rewrite=1, то есть Х будет равен 2
Не смогу, конечно.
Этот подход обработки url полностью исключает формирование дублей внешними факторами.
Разница между Вашим подходом и нашим в масштабируемости, количестве директорий и файлов.
Захотели что-то изменить в структуре вообщем:
у Вас - правим все индексные файлы в папках new, articles, category, ...
у Нас - правиться 1 файл.
Посмотрите ради интереса опенКарт, там как раз все реализовано через 1 индекс.пхп в корне, да и ВП помоему точно также реализован.
А может вам записать курс по нормальному движку и выложить в сеть? Даже за деньги.
Коллектив серча VS Попов
Потом будет кричать что количеством взяли:)
Идея давно есть в голове, но проблема в том, что у многих людей здесь не найдется на это время. А самому делать это нет особого желания, потому что вдруг что-то упущу:)
ЗЫ. да и начинать это делать с мыслью о перспективе курса оказаться на торент-трэкерах... как-то не стоит.
Ladycharm, чтобы не было злых дублей от конкурентов делаем следующее:
1) В таблицу с постами добавляем регистроЗависимое(ставим правильный коллэйшн) поле `perm_url`
2) В интерфейсе добавления поста добавляем еще 1 инпут и там пишем ЧПУ адрес. Либо же делаем какой-нить механизм(например транслитерация урлов из названия записи).
3) Делаем как писал в предыдущем посте
4)файл articles.php
В итоге, к странице www.gs.ru/articles/kak-sdelat-true-site.html мы можем достучаться тока по этому адресу.
Если сделаете www.gs.ru/articles/Кak-sdelat-truE-site.html то получите 404 ошибку, так как поле регистрозависимое.
Сможете в данной ситуации сделать дубли?
На счет:
Ок, я создал папку /articles/, создал index.php, я запрашиваю /articles/friendly-url. А теперь вопрос, с какой стати index.php должен отвечать на несуществующий, хз что в данном случае - то-ли файл, то-ли каталог?
Вариант не самый тру. ИМХО
Чем Вам модреврайт не угодил? В вашем случае, если у меня есть статьи, категории, новости придется создавать 3 папки.
А можно через index.php в корне(классика жанра) все это дело разруливать.
ЗЫ. такой вариант очень редко прокатывает(разница 115 лет), потому что за эти 115 лет уже за нас всё 100500 раз придумано, продумано, протестировано, отлажено и нам остается тока взять и заюзать!
нормуль платные курсы 😂
Попов там объясняет как собрать очередную гоносистему?
Кстати ТС, вот вам пример запроса привели
только не делайте так, хорошо?
1) * - применяется в 2-ух случаях: отладка/тест/разработка, процесс обучения.
2) Данные должны фильтроваться.
Я то дурья голова, решил что Попов об этом рассказывает и ТС зашарит:)
ЗЫ. На счет фильтрации. Она как бэ уже есть в РеврайтРуле, и если это будут не буквы, цифры, тире, то реврайта не будет.
Если есть вариант SQL-injection - просветите.
Есть вариант %39(преобразование в шеснадцатиричное значение), но:
1) Если преобразование будет до моДреврайта, то оно преобразуется в одинарную ковычку и это не попадет под правило, соответственно реврайт не сработает
2) Если преобразование происходит после модРеврайта, то он не пропустит знак %
Я думаю, что преобразование типа urldecode веб-сервер делает до модРеврайта.
Без использования одинарной ковычки Скуля невозможна. Во всяком случае я так считаю. Не прав - просветите:)
Так значит Попов плохо все делает!?
А есть кто делает правильно и с таким же подробным объяснением?
И всё таки, момент с урлами, что нужно изучить?
Смотрел пару видосов Попова(судьба меня пощадила, и я не платил за них деньги), так вот, основная проблема: он показывает что делать, но не объясняет почему делается так, а не по другому. То есть он показывает частные случаи, и редко когда объясняет сам принцип. ИМХО!
Попова сжечь, топик перечитать до просветления.
Боюсь, что из-за условия в инструкции номер 2 - получиться бесконечный цикл:)
ЗЫ. если Вам не нравиться что здесь все такие умные - задайте свой вопрос здесь. Будет круто!
if (mysql_nuw_rows($result) == 0)
//Отдаем 404 или еще че
else
{
//ПОказываем контент
}
Единственное, два дифиса отрезают кусок идующий за ними(комментарий в мускуле.) Поэтому их надо фильтровать или еще что-то.
То есть, файл остается один, а урлов много и все чпу? Это наверное всю cms нужно по другому писать?
Логику хочу понять.
Хотите понять логику - напишите отзыв на сайте Попова с просьбой создать еще 1 платный курс по HTACCESS в целом и модРЕврайту в частности:)
RewriteEngine On
RewriteRule ^articles/([\d\w-]+)\.html articles.php?url=$1 [L]
1) создаем дополнительное поле в таблице с постами. Называется пусть оно, примитивно perm_url
2) В файле(articles.php) получаем $_GET['url'].
Выбираем из БД все что связано с этой записью
Ну и дальше тоже самое, что и сейчас делается.
Само собой, что при создании поста надо в таблицу писать значение для поля perm_url(руками или транслит-скриптом дело вкуса).
Теперь Мы имеем урлы типа
www.gs.ru/articles/mo9-nova9-mawina-slomalas
В названии статьи можно использовать буквы, цифры, минус/тире
Я думал, ТС догадается, что речь идет о ЗЫСе:) Имя-то по ссылке передавать это ЛОЛ:)
Телепатов не ма, так что извольте поделиться Вашим пониманием слова "привести".
Если хотите получить нормальный ответ - научитесь задавать вопросы ПРАВИЛЬНО!