singlepost

mod_rewriteкак изменить URL-ы << На главную или назад  

На сайте есть файлы:
/page/index.php
/page/news.php
/page/gallery.php
и т.д.

1. Как сделать чтобы они открывались по таким ссылкам:
/index.php
/news.php
/gallery.php
и т.д.

2. Или таким:
/p/index.php
/p/news.php
/p/gallery.php
и т.д.

3. И чтоб в 1. для некоторых URL можно было делать исключения, например:
по /index.php открывался /index.php а не /page/index.php

Заранее спасибо! =)

14 ответов в теме “mod_rewriteкак изменить URL-ы”

Страницы: [1] 2 »

  1. 1
    Евгений Козобродов ответил:

    1.
    RewriteEngine on
    RewriteCond $1 !^(page|robots\.txt|favicon)
    RewriteRule ^(.*)$ /page/$1

    2.
    RewriteEngine on
    RewriteCond $1 !^(page|robots\.txt|favicon)
    RewriteRule ^/p/(.*)$ /page/$1

    3.
    RewriteEngine on
    RewriteCond $1 !^(index\.php)
    RewriteRule ^/p/(.*)$ /page/$1

    Что-то вроде того. Тут все адреса, кроме начинающихся с page, robots.txt и favicon, будут переписываться в начинающиеся с page. Эти решения требуют проверки, я их сходу из головы написал, вероятность ошибок высока….

    В третьем варианте делаем исключение только на индекс.пхп, сравни его с остальными вариантами.

    И не забудь включить mod_rewrite

  2. 2
    Алексей Макаров ответил:

    Хмм.. Спасибо!
    А то я эти выражения пока не умею писать.

  3. 3
    Dain Here ответил:

    regex syntax

  4. 4
    Almaz Ilyasov ответил:

    #2, классно. я вот тоже всё никак не научусь как писать эти правила. И для всяких функций наподобие preg_replace тоже не умею шаблоны делать

  5. 5
    Евгений Козобродов ответил:

    Регулярные выражения + статья на Википедии "htaccess" + статьи, доступные по ссылкам из статьи в Википедии + практика

    Это всё что нужно, чтобы научиться. А регулярными выражениями, кстати, должен владеть любой программист, ведь это очень мощная штука…

  6. 6
    Dain Here ответил:

    А гуглом, кстати, должен владеть любой программист, ведь это очень мощная штука…

    #6 прости, не выдержал…

    ещё раз, 2 all:

    regex syntax

    Или вам, судари, ещё и ссылку сюда кинуть надобно?

  7. 7
    Алексей Терещенко ответил:

    Вообще, mod_rewrite обычно используют, чтобы получать красивые урлы, типа: /index, /news, /gallery, а не /index.php, который и так доступен.

  8. 8
    Dain Here ответил:

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

  9. 9
    Алексей Макаров ответил:

    Почему у меня не работает??

    RewriteCond $1 !^(css/|index\.php$|page|robots\.txt$|favicon.ico$)
    RewriteRule (.+) /page/$1\.php [L]

    Я добавил знак $ к каждому исключению, чтобы например по favicon.icoss открывалась /page/favicon.icoss.php
    Но если $ поставить и после page то зависает. В логах пишется:
    Request exceeded the limit of 10 internal redirects due to probable configuration error.
    Флаг [L] на это никак не влияет.

    Почему так происходит? Почему после этого RewriteRule оно еще раз повторяет весь процесс?

  10. 10
    Dain Here ответил:

    знак $ в теле регулярного выражения (в данном синтаксисе) означает конец строки.

    в общем, курить мануалы

Страницы: [1] 2 »

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.