Милованов Ю.С

Милованов Ю.С
Рейтинг
196
Регистрация
24.01.2008
Должность
PROgrammer
Интересы
Автомобили, рыбалка, охота
Ms-Dred:

само название урла 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/kak-sdelat-true-site.html мы можем достучаться тока по этому адресу.

Если сделаете 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:
Так значит Попов плохо все делает!?
А есть кто делает правильно и с таким же подробным объяснением?
И всё таки, момент с урлами, что нужно изучить?

Смотрел пару видосов Попова(судьба меня пощадила, и я не платил за них деньги), так вот, основная проблема: он показывает что делать, но не объясняет почему делается так, а не по другому. То есть он показывает частные случаи, и редко когда объясняет сам принцип. ИМХО!

Mad_Man:
Попова сжечь, топик перечитать до просветления.

Боюсь, что из-за условия в инструкции номер 2 - получиться бесконечный цикл:)

ЗЫ. если Вам не нравиться что здесь все такие умные - задайте свой вопрос здесь. Будет круто!

if (mysql_nuw_rows($result) == 0)

//Отдаем 404 или еще че

else

{

//ПОказываем контент

}

Единственное, два дифиса отрезают кусок идующий за ними(комментарий в мускуле.) Поэтому их надо фильтровать или еще что-то.

WeberSeo:
То есть, файл остается один, а урлов много и все чпу? Это наверное всю cms нужно по другому писать?
Логику хочу понять.

Хотите понять логику - напишите отзыв на сайте Попова с просьбой создать еще 1 платный курс по HTACCESS в целом и модРЕврайту в частности:)

RewriteEngine On

RewriteRule ^articles/([\d\w-]+)\.html articles.php?url=$1 [L]

1) создаем дополнительное поле в таблице с постами. Называется пусть оно, примитивно perm_url

2) В файле(articles.php) получаем $_GET['url'].

Выбираем из БД все что связано с этой записью


$sql = "SELECT * FROM `gcms_posts` WHERE `perm_url`='{$_GET['url']}'";

Ну и дальше тоже самое, что и сейчас делается.

Само собой, что при создании поста надо в таблицу писать значение для поля perm_url(руками или транслит-скриптом дело вкуса).

Теперь Мы имеем урлы типа

www.gs.ru/articles/mo9-nova9-mawina-slomalas

В названии статьи можно использовать буквы, цифры, минус/тире

Я думал, ТС догадается, что речь идет о ЗЫСе:) Имя-то по ссылке передавать это ЛОЛ:)

Телепатов не ма, так что извольте поделиться Вашим пониманием слова "привести".

Если хотите получить нормальный ответ - научитесь задавать вопросы ПРАВИЛЬНО!

Всего: 1956