ЧПУ и htaccess

repacksman

Участник
Регистрация
12 Июн 2012
Сообщения
154
Реакции
4
Доброго времени суток форумчане. Подскажите что написать в файле htaccess чтоб ЧПУ виглядели так:

/packets.php в /
/packet_group_info.php?packet_group=ntv в /ntv/
/test.php в /test/
/test в /test/
 
1)

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /packets\.(php|htm|html|shtml|asp|aspx)\ HTTP/
RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^packets\.(php|htm|html|shtml|asp|aspx)$ Для просмотра ссылки Войди или Зарегистрируйся [R=301,L]

3
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.(php|htm|html|shtml|asp|aspx)\ HTTP/
RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^test\.(php|htm|html|shtml|asp|aspx)$ Для просмотра ссылки Войди или Зарегистрируйсяtest/ [R=301,L]

4
RewriteRule ^test$ /test/ [R=301,L]


2 незнаю...


1 и 2 усложнено, там и php и htm и html и т.д. от всех болезней сразу )
Можно проще.

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /packets\.php\ HTTP/
RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^packets\.php$ Для просмотра ссылки Войди или Зарегистрируйся [R=301,L]

2 по аналогии.
 
Последнее редактирование:
1)

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /packets\.(php|htm|html|shtml|asp|aspx)\ HTTP/
RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^packets\.(php|htm|html|shtml|asp|aspx)$ Для просмотра ссылки Войди или Зарегистрируйся [R=301,L]

3
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.(php|htm|html|shtml|asp|aspx)\ HTTP/
RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^test\.(php|htm|html|shtml|asp|aspx)$ Для просмотра ссылки Войди или Зарегистрируйсяtest/ [R=301,L]

4
RewriteRule ^test$ /test/ [R=301,L]


2 незнаю...


1 и 2 усложнено, там и php и htm и html и т.д. от всех болезней сразу )
Можно проще.

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /packets\.php\ HTTP/
RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^packets\.php$ Для просмотра ссылки Войди или Зарегистрируйся [R=301,L]

2 по аналогии.


А есть какойто вариант для ЧПУ всех php файлов в корневой директории одновременно. Чтоб для каждого файла не прописивать(их там более 20-ти)

/test.php в /test/
/test в /test/
 
Если отдельные правила для многих файлов, то там тогда получается на каждый файл требуются отдельные RewriteRule и RewriteCond. Хотя можно сократить число строк, используя один RewriteRule на всех и по одному RewriteCond на каждый файл.
Например:
/page1.php => /foo
/page2.php => /bar
/page3.php => /lol
Код:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\ (\S+)\ HTTP
RewriteCond foo;%1 ^(.*?);/page1.php$ [OR]
RewriteCond bar;%1 ^(.*?);/page2.php$ [OR]
RewriteCond lol;%1 ^(.*?);/page3.php$
RewriteRule ^ /%1 [R=301,L]

А если запихивать все в одну строку, то сильно страдает читабельность.
Код:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\ (\S+)\ HTTP
RewriteCond %1;/page1.php=foo;/page2.php=bar;/page3.php=lol ^([^;]+).*?;\1=([^;]+)
RewriteRule ^ /%2 [R=301,L]

Попытка улучшить читабельность :D
Код:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\ /(\S*)\ HTTP
RewriteCond %1\ page1.php=>foo\ page2.php=>bar\ page3.php=>lol ^(\S+).*?\ \1=>(\S+)
RewriteRule ^ /%2 [R=301,L]


/test.php в /test/
/test в /test/
Хотя тут, похоже, просто вырезать ".php" и дополнительно делать редирект для адресов без слеша на конце.
Код:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\ /([^/.]+)(\.php)?\ HTTP
RewriteRule ^ /%1/ [R=301,L]

Для /packet_group_info.php?packet_group=ntv при редиректе нужно сбросить get параметры, добавив знак вопроса после /ntv/.
Код:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\ /packet_group_info\.php\?packet_group=ntv\ HTTP
RewriteRule ^ /ntv/? [R=301,L]
 
Для /packet_group_info.php?packet_group=ntv при редиректе нужно сбросить get параметры, добавив знак вопроса после /ntv/.
RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\ /packet_group_info\.php\?packet_group=ntv\ HTTP
RewriteRule ^ /ntv/? [R=301,L]

/packet_group_info.php?packet_group=ntv

Вся проблемма в том что "ntv" сменная. Как теперь написать

Типа
/packet_group_info.php?packet_group=ntv в /ntv/
/packet_group_info.php?packet_group=apple в /apple/
 
Код:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\ /packet_group_info\.php\?packet_group=([^&]+)\ HTTP
RewriteRule ^ /%1/? [R=301,L]
 
Назад
Сверху