На сайте есть файлы:
/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
Заранее спасибо! =)
22 апреля 2009 в 16:00
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
22 апреля 2009 в 16:02
Хмм.. Спасибо!
А то я эти выражения пока не умею писать.
22 апреля 2009 в 17:01
regex syntax
22 апреля 2009 в 21:03
#2, классно. я вот тоже всё никак не научусь как писать эти правила. И для всяких функций наподобие preg_replace тоже не умею шаблоны делать
22 апреля 2009 в 21:03
Регулярные выражения + статья на Википедии "htaccess" + статьи, доступные по ссылкам из статьи в Википедии + практика
Это всё что нужно, чтобы научиться. А регулярными выражениями, кстати, должен владеть любой программист, ведь это очень мощная штука…
22 апреля 2009 в 22:03
А гуглом, кстати, должен владеть любой программист, ведь это очень мощная штука…
#6 прости, не выдержал…
ещё раз, 2 all:
regex syntax
Или вам, судари, ещё и ссылку сюда кинуть надобно?
23 апреля 2009 в 0:05
Вообще, mod_rewrite обычно используют, чтобы получать красивые урлы, типа: /index, /news, /gallery, а не /index.php, который и так доступен.
23 апреля 2009 в 1:00
Не совсем так. Т.е. иногда бывает совсем не так.
Если пишешь какую-нидь регулярку, которая преобразует вообще всё, что к ней приходит, но не хотелось бы, чтобы реврайту подвергались определенные урлы, то это более чем логично поставить исключение. Я даже немного смущен…
19 июня 2009 в 23:00
Почему у меня не работает??
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 оно еще раз повторяет весь процесс?
19 июня 2009 в 23:01
знак $ в теле регулярного выражения (в данном синтаксисе) означает конец строки.
в общем, курить мануалы