Jump to content
  • 0

mod rewrite


greeb
 Share

Question

Здравствуйте, может не в тот раздел, но более подходящего не нашел...

Есть набор правил файла .htacceess


RewriteRule ^([^/]*)\.html$ /index.php?name=$1 [L]
RewriteRule ^([^/]*)\.html$ /index.php?type=$1 [L]
RewriteRule ^([^/]*)\.html$ /index.php?p=$1 [L]

Проблема в том , что срабатывает всегда то правило которое расположенно первым.

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

Например я захожу по ссылке site.ru/1.html но выводится страница которая соответсвует первому правилу.

Подскажите пожайлуста где я ошибся.

Заранее спасибо.

Link to comment
Share on other sites

18 answers to this question

Recommended Posts

  • 0

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

Модификатор [L] убирал , ничего не менялось.

Link to comment
Share on other sites

  • 0

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

Не пойму, хоть страница одинакова, но параметры же разные, почему тогда срабатывает только одно правило?

З.ы. Что нужно исправить в моих правилах что бы они заработали?

Link to comment
Share on other sites

  • 0

Ну вот давайте посмотрим.


RewriteRule ^([^/]*)\.html$ /index.php?name=$1 [L]
RewriteRule ^([^/]*)\.html$ /index.php?type=$1 [L]
RewriteRule ^([^/]*)\.html$ /index.php?p=$1 [L]

Вот три правила. Выполняются они по порядку. Пусть URN у нас будет some.html. Проверяем первое правило. some.html успешно матчится регуляркой ^([^/]*)\.html$. Поскольку успешно, то переписываем URN и он становится index.php?name=some. Видим модификатор [L] и больше не проверяем ни одно правило.

Если убрать [L], то проверяется второе правило, а потом третье. После первого преобразования index.php?name=some больше не сматчится ни одной регуляркой и так и останется в таком виде.

Если я пытаюсь перейти по ссылке которая должна попадать под второе правило , все равно срабатывает первое

У вас нет второго правила. Правило у вас всегда одно и то же. Поэтому если выполнится, то только первое. Если первое не выполнится, то второе тоже не выполнится, так как оно одинаковое.

Объясните что вы хотите сделать — тогда попробуем придумать как это надо сделать.

Link to comment
Share on other sites

  • 0


RewriteRule ^([A-Za-z_0-9]+).html$/?$ index.php?name=$1

оно?

Так при site.ru/user.html открывается нужная страница, но не передаются какие либо параметры через GET.

RewriteRule ^([A-Za-z_0-9]+).html$/?$ /index.php?p=$1

А так site.ru/2.html вообще 404

Link to comment
Share on other sites

  • 0

Ну вот давайте посмотрим.


RewriteRule ^([^/]*)\.html$ /index.php?name=$1 [L]
RewriteRule ^([^/]*)\.html$ /index.php?type=$1 [L]
RewriteRule ^([^/]*)\.html$ /index.php?p=$1 [L]

Вот три правила. Выполняются они по порядку. Пусть URN у нас будет some.html. Проверяем первое правило. some.html успешно матчится регуляркой ^([^/]*)\.html$. Поскольку успешно, то переписываем URN и он становится index.php?name=some. Видим модификатор [L] и больше не проверяем ни одно правило.

Если убрать [L], то проверяется второе правило, а потом третье. После первого преобразования index.php?name=some больше не сматчится ни одной регуляркой и так и останется в таком виде.

Если я пытаюсь перейти по ссылке которая должна попадать под второе правило , все равно срабатывает первое

У вас нет второго правила. Правило у вас всегда одно и то же. Поэтому если выполнится, то только первое. Если первое не выполнится, то второе тоже не выполнится, так как оно одинаковое.

Объясните что вы хотите сделать — тогда попробуем придумать как это надо сделать.

мне нужно что бы ссылки имели такой вид:

site.ru/index.php?p=1 преобразовывалось в site.ru/1.html

site.ru/index.php?type=about преобразовывалось в site.ru/about.html

site.ru/index.php?name=username преобразовывалось в site.ru/username.html

Edited by greeb
Link to comment
Share on other sites

  • 0

Есть ссылки вида

site.ru/index.php?p=1

site.ru/index.php?type=about

site.ru/index.php?name=username

нужно что бы при вводе

site.ru/username.html обрабатывалась ссылка site.ru/index.php?name=username

site.ru/aboout.html обрабатывалась ссылка site.ru/index.php?type=about

site.ru/1.html обрабатывалась ссылка site.ru/index.php?p=1

Link to comment
Share on other sites

  • 0

Ну даже незнаю как еще понятней обьяснить)

нужно правила для преобразования ссылок вида

site.ru/index.php?p=1

site.ru/index.php?type=about

site.ru/index.php?name=username

в ЧПУ

желательный вид ссылок на выходе

site.ru/1.html

site.ru/about.html

site.ru/username.html соответсвенно

Link to comment
Share on other sites

  • 0

Ну даже незнаю как еще понятней обьяснить)

нужно правила для преобразования ссылок вида

site.ru/index.php?p=1

site.ru/index.php?type=about

site.ru/index.php?name=username

в ЧПУ

желательный вид ссылок на выходе

site.ru/1.html

site.ru/about.html

site.ru/username.html соответсвенно

Вам тут пытаются объяснить что:

Ссылка вида: site.ru/1.html не может однозначно превратиться в ссылку вида: site.ru/index.php?p=1, потому что она может так же быть site.ru/index.php?type=1 или site.ru/index.php?name=1

Логичней вам разбить на:

site.ru/p/1.html <==> site.ru/index.php?p=1

site.ru/type/about.html <==> site.ru/index.php?type=about

site.ru/name/username.html <==> site.ru/index.php?name=username

Link to comment
Share on other sites

  • 0

Я думал что регулярка разбирает строку с учетом параметров...

type и name никогда не могут быть цифрой... там передается слово...

Логичней вам разбить на:

site.ru/p/1.html <==> site.ru/index.php?p=1

site.ru/type/about.html <==> site.ru/index.php?type=about

site.ru/name/username.html <==> site.ru/index.php?name=username

Согласитесь не очень красивые ссылки, непонятно что за type и name зачем

Edited by greeb
Link to comment
Share on other sites

  • 0

Так при site.ru/user.html открывается нужная страница, но не передаются какие либо параметры через GET.

RewriteRule ^([A-Za-z_0-9]+).html$/?$ /index.php?p=$1

А так site.ru/2.html вообще 404

ну тут тогда только так:

ссылка:


http://site.ru/about/index.html

rewrite


RewriteRule ^about/(.*).html/$?$ index.php?type=about&p=$1

как-то так...

Link to comment
Share on other sites

  • 0

Согласитесь не очень красивые ссылки, непонятно что за type и name зачем

Да мне как-то пофиг и ещё 100500 юзерам, и моё личное мнение что ЧПУ оно как-то нахрен никому не нужно, нужно делать грамотный интерфейст а что там в адресной строке никого волновать не должно ни человека ни поисковик.

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

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