mod_rewrite

12
malls
На сайте с 08.08.2005
Offline
255
928

блин помогите, туплю, надо правила прописать:


//site.com/fr/page.html => //site.com/index.php?lang=fr&file=page
//site.com/ru/page.html => //site.com/index.php?lang=ru&file=page

//site.com/fr/ => //site.com/index.php?lang=fr&file=
//site.com/fr => //site.com/index.php?lang=fr&file=

//site.com/page.html => //site.com/index.php?lang=&file=page
//site.com/ => //site.com/index.php?lang=&file=

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

aleksey_php
На сайте с 17.03.2008
Offline
53
#1

Для всего Вашего шаблона будет такой код:

RewriteEngine on

RewriteRule ^fr/(.*)\.html$ index.php?lang=fr&file=$1
RewriteRule ^ru/(.*)\.html$ index.php?lang=ru&file=$1
RewriteRule ^fr/$ index.php?lang=fr&file=
RewriteRule ^fr$ index.php?lang=fr&file=
RewriteRule ^(.*)\.html$ index.php?lang=&file=$1
RewriteRule .* index.php?lang=&file=
malls
На сайте с 08.08.2005
Offline
255
#2
aleksey_php:
кроме 3 и 4 строки

это лишку скопипастил просто :)

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

Там на самом деле проще все:

RewriteRule ^([^/]*).html$ index.php?page=$1

RewriteRule ^(.*)/(.*)[.html]?$ index.php?lang=$1&page=$2

но вот глючит в случае вызова:

site.com/fr

т.е. когда слеша нет.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#3

malls,

а может решить проще

RewriteRule ^(*)$ index.php?page=$1

Просто передав скрипту все кроме домена. А скрипт уже сам препарирует строки и не мучать реврайт

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
[Удален]
#4

лучше дать его апачу, вдруг потребуется сделать apache_lookup_uri

чтобы открывалось и со слешем и без слеша я лично использую такое


RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/]{1})$ http://%{HTTP_HOST}/$1$2/ [R=301,L]

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

malls
На сайте с 08.08.2005
Offline
255
#5
T.R.O.N:
передав скрипту все кроме домена.

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

neolord:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/]{1})$ http://%{HTTP_HOST}/$1$2/ [R=301,L]

Мысль понятна - сам как-то не дотумкал - но реализация все равно не получается. Он же в таком случае будет в обращениях вида:

site.com/en считать en файлом - и правило рушится.

блин - запарился, тем более проблема еще возникла - в сочетаниях вида:

site.com/en/

site.com/fr/

site.com/ru/

site.com/.../

site.com/admin/

нужно последний вариант отличить и оставить как есть.

J
На сайте с 02.02.2009
Offline
53
#6

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d # подойдет для любой директории в целом

RewriteRule ^(.*)([^/]{1})$ http://%{HTTP_HOST}/$1$2/ [R=301,L]

или же

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !^/admin

RewriteRule ^(.*)([^/]{1})$ http://%{HTTP_HOST}/$1$2/ [R=301,L]

malls
На сайте с 08.08.2005
Offline
255
#7

блин ну у меня в таком варианте он все переписывает как и в предыдущем т.е.:

site.com/en/ => site.com/en/

site.com/en => site.com/en/

site.com/en/page.html => site.com/en/page.html/

site.com/page.html => site.com/page.html/

т.е. косячит!

возьмитесь кто-нибудь помочь. 10 баксов! или мало? условия те же:

site.com/(*)/(*).html

site.com/(*)/

site.com/(*)

site.com/

все это в:

index.php?lang=$1&page=$2

site.com/(*).html

это в:

index.php?lang=&page=$1

для простоты понимания - если в конце запроса файл - у него всегда приписан .html, если такого нет, т.е. например:

site.com/(*)/(*)

это косяк - т.е. 404

Важно чтобы он не путал язык и файлы - в предложенных вариантах он помимо прочего это и делает.

за исключением:

site.com/(admin)/

site.com/(admin)

это добро в:

site.com/admin/

т.е. "как есть"

Vladimir
На сайте с 07.06.2004
Offline
590
#8
malls:
блин ну у меня в таком варианте он все переписываеткак и в предыдущем т.е.:
site.com/en/ => site.com/en/
site.com/en => site.com/en/
site.com/en/page.html => site.com/en/page.html/
site.com/page.html => site.com/page.html/
т.е. косячит!

возьмитесь кто-нибудь помочь. 10 баксов! или мало?

как в .htaccess добавить завершающий слэш если его нет и ссылка не на файл

RewriteEngine on

Options +FollowSymlinks

RewriteBase /

RewriteRule ^/([a-z]+)(/)?$ /index.php?param=$1

попробуйте так

Аэройога ( https://vk.com/aeroyogadom ) Йога в гамаках ( https://vk.com/aero_yoga ) Аэройога обучение ( https://aeroyoga.ru ) и просто фото ( https://weandworld.com )
J
На сайте с 02.02.2009
Offline
53
#9
malls:
блин ну у меня в таком варианте он все переписывает как и в предыдущем т.е.:
site.com/en/ => site.com/en/
site.com/en => site.com/en/
site.com/en/page.html => site.com/en/page.html/
site.com/page.html => site.com/page.html/
т.е. косячит!

возьмитесь кто-нибудь помочь. 10 баксов! или мало? условия те же:
site.com/(*)/(*).html
site.com/(*)/
site.com/(*)
site.com/
все это в:
index.php?lang=$1&page=$2

site.com/(*).html
это в:
index.php?lang=&page=$1

для простоты понимания - если в конце запроса файл - у него всегда приписан .html, если такого нет, т.е. например:
site.com/(*)/(*)
это косяк - т.е. 404
Важно чтобы он не путал язык и файлы - в предложенных вариантах он помимо прочего это и делает.

за исключением:
site.com/(admin)/
site.com/(admin)
это добро в:
site.com/admin/
т.е. "как есть"

RewriteEngine On

RewriteBase /

RewriteRule ^([^\/]+)\.html$ index.php?lang=&page=$1 [NC,L]

RewriteCond %{REQUEST_URI} !^admin

RewriteRule ^([^\/]+)\/?$ index.php?lang=$1 [NC,L]

RewriteCond %{REQUEST_URI} !^admin

RewriteRule ^([^\/]+)\/(.+)\.html$ index.php?lang=$1&page=$2 [NC,L]

или же два последних правила обьединить в одно

RewriteCond %{REQUEST_URI} !^admin

RewriteRule ^([^\/]+)?\/?(.+)\.html$ index.php?lang=$1&page=$2 [NC,L] - теоретически должно работать

Надеюсь, что всё правильно понял)

malls
На сайте с 08.08.2005
Offline
255
#10
jumash:
теоретически должно работать

ключевое слово - теоретически, практически вообще ни одно правило не обрабатыватся.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий