Jump to content
  • 0

Помогите разобраться с ЧПУ(Friendly url)


bgraf
 Share

Question

Здравствуйте!

Вот добрался до темы ЧПУ, .htaccess .

перед тем как открыть тему прошерстил нет на эту тему, но вероятно плохо искал если решил спросить на форуме.

Помогите мне разобраться, дайте ссылки или объясните что надо делать.

У меня нет файла .htaccess но как я понял его можно создать самому в формате unix и через ftp загрузить, так ли это, или без админа не справиться?

Если мне надо менять url-ы в папке www.aaa.ru/games/ мне надо создать файл .htaccess в нутри этой папки или всетаки в корне?

У меня есть динамическая страница www.aaa.ru/games/temp.php?name=delta&type=wall&articul=red_bell

где в зависимости от переменных я делаю выборку из бд и создаю страницу, мне бы хотелось такой url сделать вот таким www.aaa.ru/games/delta_red_bell.html и соответственно из бд получить данные и создать страницу. Помогите как мне это сделать, что мне надо писать в .htaccess?

С уважением и заранее спасибо всем Вам!

Link to comment
Share on other sites

Recommended Posts

  • 0

да много чего не понятного. если бы было понятно не задал бы вопрос.

не понятно: если у меня динамическая страница вот по такому адресу www.aaa.ru/games/index.php?name=delta&type=wall&articul=red_bell, то где мне файл .htaccess создавать тут www.aaa.ru/games/ или в корне?

не понятно:

RewriteEngine on
RewriteBase /
RewriteRule ^([0-9]+)/([A-Za-z_0-9]+)/?$ index.html?page=$1&categories=$2

это в .htaccess

а вот это где ?

$result = mysql_query ("SELECT * FROM `pages` WHERE `parent_id` = '0'");
while ($myrow = mysql_fetch_array($result))
{
echo "<a href=\"http://".$_SERVER['HTTP_HOST']."
/".$myrow['id']."/".$myrow['categories'
])."\">".$myrow['title']."<
/a>";
}

простите что туплю, но очень хочется разобраться

Link to comment
Share on other sites

  • 0

по примеру Вашей ссылки сделал следующее.

1. В блокноте создал файл .htaccess как показано на этомпримере.

И поместил его в папку www.aaa.ru/games/

2. В .htaccess написал

RewriteEngine on
RewriteBase /
RewriteRule ^([A-Za-z_0-9]+)/([A-Za-z_0-9]+)/([0-9]+)?$ index.html?name=$1&menu=$2&page=$3

3. В самом файле www.aaa.ru/games/index.php написал такой код

......

......

echo "<a href=\"http://".$_SERVER['HTTP_HOST']."/galery/".$name."/".$menu."/".$i.".html\">".($i+1)."</a>";

......

......

при нажатии получаю ошибку HTTP Error 404 - File or directory not found.

Internet Information Services (IIS)

что сделал не так?

Edited by bgraf
Link to comment
Share on other sites

  • 0

что сделал не так?

Нверно упустил смысл параметра RewriteBase /

RewriteBase physical-directory-path

изменил на RewriteBase /games/ не работает или я все не так понял?

Ответьте не загадкой или поправьте выше приведенные действия

Link to comment
Share on other sites

  • 0

RewriteBase physical-directory-path

изменил на RewriteBase /games/ не работает или я все не так понял?

Правильно поняли. Не работает значит дело не только в этом.

Ответьте не загадкой или поправьте выше приведенные действия

Я отвечаю по теме ровно столько насколько есть желание или возможность или настроение. Сегодня у меня нет настроения детально копаться и также объяснять что не так (Как правило я не люблю всё разжовывать и/или делать всё за вас). Ждите когда кто-нибудь другой расскажет вам подробнее или сделает рабочий пример. Мне больше нравится когда люди сами стараются, читают и делают выводы(пускай и ошибочные).

Link to comment
Share on other sites

  • 0

RewriteBase physical-directory-path

изменил на RewriteBase /games/ не работает или я все не так понял?

Правильно поняли. Не работает значит дело не только в этом.

Ответьте не загадкой или поправьте выше приведенные действия

Я отвечаю по теме ровно столько насколько есть желание или возможность или настроение. Сегодня у меня нет настроения детально копаться и также объяснять что не так (Как правило я не люблю всё разжовывать и/или делать всё за вас). Ждите когда кто-нибудь другой расскажет вам подробнее или сделает рабочий пример. Мне больше нравится когда люди сами стараются, читают и делают выводы(пускай и ошибочные).

Да я и сам люблю покапаться, просто в нете столько противоречивых объяснений, поэтоиу пока ищу и набиваю шишки может кто-то здесь окажет помощь.

Вам спасибо и хорошего настроения.

Link to comment
Share on other sites

  • 0

по примеру Вашей ссылки сделал следующее.

1. В блокноте создал файл .htaccess как показано на этомпримере.

И поместил его в папку www.aaa.ru/games/

<!-- файл .htaccess помещают обычно в корень сайта (закидывают через ftp), а это как правило директории: www/ или htdocs/ или htmlpublic/ и т.д... -->

2. В .htaccess написал


RewriteEngine on
RewriteBase /
RewriteRule ^([A-Za-z_0-9]+)/([A-Za-z_0-9]+)/([0-9]+)?$ index.html?name=$1&menu=$2&page=$3
<!-- а вы уверены что файл который обрабатывает пришедшие гетом данные именно с расширением .html ? -->
<!-- А вы уверены что путь до файла обработчика вообще правильный? -->

3. В самом файле www.aaa.ru/games/index.php написал такой код

......

......


echo "<a href=\"http://".$_SERVER['HTTP_HOST']."/galery/".$name."/".$menu."/".$i.".html\">".($i+1)."</a>";
<!-- откуда взялись переменные $name, $menu и $i ? -->

......

......

при нажатии получаю ошибку HTTP Error 404 - File or directory not found.

Internet Information Services (IIS)

что сделал не так?

в самой цитате я вам ответил что могло быть не так.

выложите сюда листинг запроса и вывода на получение формирования ссылки, для которой должно быть задействовано чпу.

Link to comment
Share on other sites

  • 0

в самой цитате я вам ответил что могло быть не так.

выложите сюда листинг запроса и вывода на получение формирования ссылки, для которой должно быть задействовано чпу.

вот вывод я же написал

echo "<a href=\"http://".$_SERVER['HTTP_HOST']."
/galery/".$name."/".$menu."/".$i.".html\
">".($i+1)."</a>";

я делаю обычный селект получаю в переменные данные и на их основе формирую запрос .

Или я Вас не понял? простите

в результате линк получается www.site.ru/games/fifa/one/1.html это то что я выдумал т.е. чпу

а настоящая страница www.site.ru/games/index.php?name=fifa&menu=one&page=1

Edited by rus
Link to comment
Share on other sites

  • 0
вот вывод я же написал

echo "<a href=\"http://".$_SERVER['HTTP_HOST']."
/galery/".$name."/".$menu."/".$i.".html\
">".($i+1)."</a>";

я делаю обычный селект получаю в переменные данные и на их основе формирую запрос .

Или я Вас не понял? простите

в результате линк получается www.site.ru/games/fifa/one/1.html это то что я выдумал т.е. чпу

а настоящая страница www.site.ru/games/index.php?name=fifa&menu=one&page=1

1) где находится (в какой папке) файл с запросом в бд, его обработкой, выводом в линк?

2) почему у вас файл с расширением .html что отвечает за обработку php кода в .html файле?

3) где, в какой папке лежит файл .htaccess?

чем меньше данных, тем размазаннее и мутнее будет ответ.

тут телепатов нету, что бы видеть все ваши действия и ваш код.

З.Ы. весь код тут не нужен, только проблемные участки с начальной и финальной версией и с пояснениями к каждому из них.

Link to comment
Share on other sites

  • 0
вот вывод я же написал

echo "<a href=\"http://".$_SERVER['HTTP_HOST']."
/galery/".$name."/".$menu."/".$i.".html\
">".($i+1)."</a>";

я делаю обычный селект получаю в переменные данные и на их основе формирую запрос .

Или я Вас не понял? простите

в результате линк получается www.site.ru/games/fifa/one/1.html это то что я выдумал т.е. чпу

а настоящая страница www.site.ru/games/index.php?name=fifa&menu=one&page=1

1) где находится (в какой папке) файл с запросом в бд, его обработкой, выводом в линк?

2) почему у вас файл с расширением .html что отвечает за обработку php кода в .html файле?

3) где, в какой папке лежит файл .htaccess?

чем меньше данных, тем размазаннее и мутнее будет ответ.

тут телепатов нету, что бы видеть все ваши действия и ваш код.

З.Ы. весь код тут не нужен, только проблемные участки с начальной и финальной версией и с пояснениями к каждому из них.

1. Здесь находится главный файл с запросом к б.д. , его обработкой и выводом линков

www.site.ru/games/index.php

2. Расширение файла php, это динамическая страница, которая формируется на основе данных полученных из б.д. а расширение html, это мое пожелание чтобы линк(чпу) выглядел именно не с .php а .html если это возможно.

3. Файл .htaccess лежит в games/ т.е. полный путь к нему www.site.ru/games/.htaccess

теперь код.

не стану вставлять код как я делаю селект и как я получаю переменный, страница рабочая, приведу лишь пример того как у меня было до того как я изменил и после, линки на номера страниц.

echo ('<a style="padding:2px;font-family: Arial, Verdana, Tahoma;font-weight:bold;color:#9c0d09;" href="games/index.php?name='.$game_name.'&menu='.$type_menu.'&n_page='.$i.'">'.($i+1).'</a>');

это до того как изменил. при селекте я узнал сколько картинок у меня по данному селекту, получилось 40, я разделил их по 20 на страницу и у меня получилось две строницы :

1- www.site.ru/games/index.php?name=fifa&menu=one&page=1

2- www.site.ru/games/index.php?name=fifa&menu=one&page=2

причем на стронице www.site.ru/games/index.php есть меню где я могу выбрать name,menu

а вот то что я сделал потом

echo "<a href=\"http://".$_SERVER['HTTP_HOST']."/games/".$game_name."/".$type_menu."/".$i.".html\">".($i+1)."</a>";

а вот содержимое .htaccess

RewriteEngine on
RewriteBase /games/
RewriteRule ^([A-Za-z_0-9]+)/([A-Za-z_0-9]+)/([0-9]+)?$ test_ind.php?t_name=$1&n_menu=$2&n_page=$3 [L,QSA]

Edited by bgraf
Link to comment
Share on other sites

  • 0

Давайте разберемся:

1) а нужно ли вам это? а чем не устраивают линки типа: games/heroes/5 ?

2) для чего htaccess запихивать в папку /games ? не проще ли кинуть htaccess в корень сайта и просто прописать путь до обработчика? удобнее ведь будет править один htaccess, чем в каждой папке их плодить.

Вобщем именно для вашего случая вот должен быть рабочий вариант:

файл /games/index.php


echo "<a href=\"http://".$_SERVER['HTTP_HOST']."/games/".$game_name."/".$type_menu."/".$i.".html\">".($i+1)."</a>";

файл htaccess который в папке /games/


RewriteEngine on
RewriteBase /
RewriteRule ^(.*)/(.*)/(.*).html?$ index.php?name=$1&menu=$2&page=$3

должно работать.

Link to comment
Share on other sites

  • 0

Давайте разберемся:

1) а нужно ли вам это? а чем не устраивают линки типа: games/heroes/5 ?

2) для чего htaccess запихивать в папку /games ? не проще ли кинуть htaccess в корень сайта и просто прописать путь до обработчика? удобнее ведь будет править один htaccess, чем в каждой папке их плодить.

Вобщем именно для вашего случая вот должен быть рабочий вариант:

файл /games/index.php


echo "<a href=\"http://".$_SERVER['HTTP_HOST']."/games/".$game_name."/".$type_menu."/".$i.".html\">".($i+1)."</a>";

файл htaccess который в папке /games/


RewriteEngine on
RewriteBase /
RewriteRule ^(.*)/(.*)/(.*).html?$ index.php?name=$1&menu=$2&page=$3

должно работать.

1. линки такого типа www.site.ru/games/fifa/one/1.html лучше ранжируются индексируются поисковиками, хотя многие спорят на эту тему, я не хочу спорить, я просто думаю что так будет лучше.

2. перед тем как писать тему я много прочитал статей наэту тему, и понял что можно сделать свои правила для каждой папки, я просто люблю порядок на сервере и зная что у меня есть в каждой папке мне удобнее.

Пример сделал НЕ РАБОТАЕТ.

HTTP Error 404 - File or directory not found.

Internet Information Services (IIS)

Edited by bgraf
Link to comment
Share on other sites

  • 0

ради интереса, попробовал у себя на одном проекте - все работает... только вот файл .htaccess лежит в корне.

еще раз повторюсь, .htaccess удобнее держать в корне, что бы редактировать только его одного, а не по разным папкам лазить и править.

вот что у меня получилось:

файл обработчик:


<a class="'.$link.'" href="http://'.$_SERVER['HTTP_HOST'].'/'.$left_menu_news['news_url'].'/news/'.$left_menu_news['news_id'].'.html/" title="'.$left_menu_news['news_title'].'">'.$left_menu_news['news_title'].'</a></li>';

/news/ - это вымышленный виртуальный путь и из бд он не достается, просто сам выдумал.

файл .htaccess в корне сайта:


RewriteRule ^(.*)/news/(.*).html/?$ index.php?news_url=$1&news_nav=news&news_id=$2

news_nav=news - вот тут как раз можно использовать гет переменную news_nav содержащую в себе параметр news.

все замечательно работает.

З.Ы. стопудово вы не правильно в htaccess подставляете переменные!

Link to comment
Share on other sites

  • 0

А у IIS (Internet Information Services) модуль для обработки данных директив стоит ? А то так долго можно разговаривать, один на apache другой на IIS.

Гугл приводит на страницу Url Rewrite

Link to comment
Share on other sites

  • 0

ради интереса, попробовал у себя на одном проекте - все работает... только вот файл .htaccess лежит в корне.

еще раз повторюсь, .htaccess удобнее держать в корне, что бы редактировать только его одного, а не по разным папкам лазить и править.

вот что у меня получилось:

файл обработчик:


<a class="'.$link.'" href="http://'.$_SERVER['HTTP_HOST'].'/'.$left_menu_news['news_url'].'/news/'.$left_menu_news['news_id'].'.html/" title="'.$left_menu_news['news_title'].'">'.$left_menu_news['news_title'].'</a></li>';

/news/ - это вымышленный виртуальный путь и из бд он не достается, просто сам выдумал.

файл .htaccess в корне сайта:


RewriteRule ^(.*)/news/(.*).html/?$ index.php?news_url=$1&news_nav=news&news_id=$2

news_nav=news - вот тут как раз можно использовать гет переменную news_nav содержащую в себе параметр news.

все замечательно работает.

перенес в корень т.е. сюда www.site.ru/.htaccess всеравно HTTP Error 404 - File or directory not found.

Internet Information Services (IIS)

может я не правильно сам файл .htaccess сделал . я открыл блокнот поменял .txt на all format и дал файлу имя .htaccess .

это правильно?

А у IIS (Internet Information Services) модуль для обработки данных директив стоит ? А то так долго можно разговаривать, один на apache другой на IIS.

Гугл приводит на страницу Url Rewrite

на это я ответить не могу, так как не знаю, это наверно в хостинг звонить надо?

Link to comment
Share on other sites

  • 0

Вобщем связался с хостингом, они подключили поддержку htaccess

даже создали мне его в корне и даже прислали пример

вот с такой ссылки http://www.site.ru/friendly попадаю на www.site.ru/about_us.php

а вот то что они прописали в htaccess

RewriteRule ^friendly$ about_us.php  [NC,L]

все работает

только вот не работает это

RewriteRule ^galery/(.*)/(.*)/(.*).html?$ galery/test_ind.php?t_name=$1&n_menu=$2&n_page=$3 

что не так подскажите.

1. файл htaccess в корне

2. .php файл с запросом в бд составлением и выводом линка тут www.site.ru/galery/test_ind.php

3. вот такие виды чпу линка www.site.ru/galery/deltalight/wall/1.html , www.site.ru/galery/deltalight/wall/2.html и т.п.

Господа разобрался

RewriteRule ^galery/(.*)/(.*)/(.*).html$ galery/test_ind.php?t_name=$1&n_menu=$2&n_page=$3 

этот код работает я забыл стереть htaccess в директории galery/

только теперь другая проблема, все стили пропали.

1. это путь к файлу css <link href="../style_demo.css" rel="stylesheet" type="text/css" />

2. это base <base href="http://www.site.ru">

что нужно переделать или добавить?

Edited by bgraf
Link to comment
Share on other sites

  • 0

только вот не работает это

RewriteRule ^galery/(.*)/(.*)/(.*).html?$ galery/test_ind.php?t_name=$1&n_menu=$2&n_page=$3 

что не так подскажите.

как я уже сказал выше, скорее всего вы не те переменные вставляете в условие RewriteRule, туда нужно вставлять не значение переменной, а саму переменную, которая содержит значение.

Link to comment
Share on other sites

  • 0

Господа разобрался

RewriteRule ^galery/(.*)/(.*)/(.*).html$ galery/test_ind.php?t_name=$1&n_menu=$2&n_page=$3 

этот код работает я забыл стереть htaccess в директории galery/

только теперь другая проблема, все стили пропали.

1. это путь к файлу css <link href="../style_demo.css" rel="stylesheet" type="text/css" />

2. это base <base href="http://www.site.ru">

что нужно переделать или добавить?

Edited by bgraf
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy