[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: пару вопросов по ЧПУ
Страницы: 1, 2
darkavenger
да
darkavenger
короче дело вот в этой бороде, я методом вычета это вычислил, что-то не так в моей писанине


RewriteRule ^([-a-zA-Z]+)/([-a-zA-Z_]+)/? $2.php?lang=$1 [QSA,L]
darkavenger
а в частности, если я пишу в отдельности для каждой страницы вот так

RewriteRule ^([-a-zA-Z]+)/about/? about.php?lang=$1 [QSA,L]


вместо такого

RewriteRule ^([-a-zA-Z]+)/([-a-zA-Z_]+)/? $2.php?lang=$1 [QSA,L]

то шрифты не рушатся...
что я неправильно делаю?
killer8080
Цитата (darkavenger @ 8.02.2013 - 20:27)
короче дело вот в этой бороде, я методом вычета это вычислил, что-то не так в моей писанине
RewriteRule ^([-a-zA-Z]+)/([-a-zA-Z_]+)/? $2.php?lang=$1 [QSA,L]

ну вобщето нужно было сразу показывать с каким кодом работаешь, экстрасенсы в отпуске.

Цитата (darkavenger @ 8.02.2013 - 20:35)
вместо такого
RewriteRule ^([-a-zA-Z]+)/([-a-zA-Z_]+)/? $2.php?lang=$1 [QSA,L]

нужно было просто добавить условия, чтоб статику отдавало нормально
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]{2})/([-a-zA-Z_]+)/? $2.php?lang=$1 [QSA,L]

вот чтоб не было такого гемора с ЧПУ, и делают приложение с общей точкой входа
darkavenger
спасибо! имеется ввиду вообще реализовать mvc?

да и можно если не сложно объяснить на словах что значит


RewriteCond %{THE_REQUEST} (\?|&)lang=([a-z]{2}) [NC]
RewriteRule ^([a-z\d]+)\.php$ http://%{HTTP_HOST}/%2/$1/? [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]


чтоб я мог переписать еще для одного подкаталога
killer8080
Цитата (darkavenger @ 9.02.2013 - 12:45)
да и можно если не сложно объяснить  на словах что значит

%{THE_REQUEST} переменная содержит в себе первую строку http заголовка запроса, вида (впринципе можно было использовать %{QUERY_STRING})
GET /index.php?lang=ru HTTP/1.1

(\?|&)lang=([a-z]{2}) регулярка отлавливает запросы в которых есть параметр lang с двух буквенным значением, типа lang=ru lang=en и т.п. С захватом кода языка во вторую подмаску
RewriteRule ^([a-z\d]+)\.php$ http://%{HTTP_HOST}/%2/$1/? [L,R=301] собственно сам редирект.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]
стандартные правила для приложений с общей точкой входа
darkavenger
а чтобы отловить адрес http://mysite.ru/file.php?lang=ru&id=1 и сделать из него http://mysite.ru/ru/file/1/ я пишу

RewriteRule ^([a-zA-Z]{2})/([-a-zA-Z_]+)/([0-9]+)/? $2.php?lang=$1&id=$3 [QSA,L]

RewriteCond %{THE_REQUEST} (\?|&)lang=([a-z]{2})&id=([0-9]+) [NC]
RewriteRule ^([a-z\d]+)\.php$ http://%{HTTP_HOST}/%2/$1/%3/? [L,R=301]

правильно?

darkavenger
проверка опытным путем показала что это выражение неверно..
killer8080
darkavenger
тут имеет значение порядок правил в файле. Эти правила нужно размещать до тех, что я тебе давал.
darkavenger
а почему?
darkavenger
на хосте восстановили панель управления, я проверил: раньше доступность http://mysite.ru/ru/file/1/ и не была. Поставил правило раньше - заработало. Редирект как не работал так и не работает, куда б не ставил
killer8080
Цитата (darkavenger @ 11.02.2013 - 16:37)
а почему?

потому что http://mysite.ru/ru/file/1/ и http://mysite.ru/ru/file/ оба подходят под правило
RewriteRule ^([-a-zA-Z]+)/([-a-zA-Z_]+)/? $2.php?lang=$1 [QSA,L]

RewriteCond %{THE_REQUEST} (\?|&)lang=([a-z]{2})&id=([0-9]+) [NC]
RewriteRule ^([a-z\d]+)\.php$ http://%{HTTP_HOST}/%2/$1/%3/? [L,R=301]

не лучший вариант, у тебя правило жестко привязано к порядку следования параметров в запросе. Поменяй lang и id местами, и не будет работать. Лучше создать отдельные условия по каждый параметр
RewriteCond %{THE_REQUEST} (\?|&)lang=([a-z]{2}) [NC]
RewriteCond %{THE_REQUEST} (\?|&)id=([0-9]+) [NC]
RewriteRule ^([a-z\d]+)\.php$ http://%{HTTP_HOST}/%2/$1/%4/? [L,R=301]


Цитата (darkavenger @ 11.02.2013 - 16:53)
Редирект как не работал так и не работает, куда б не ставил

покажи полный код
darkavenger

AddDefaultCharset UTF-8
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
php_flag register_globals Off
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-zA-Z]{2})/([-a-zA-Z_]+)/([0-9]+)/? $2.php?lang=$1&id=$3 [QSA,L]

RewriteCond %{THE_REQUEST} (\?|&)lang=([a-z]{2})&id=([0-9]+) [NC]
RewriteRule ^([a-z\d]+)\.php$ http://%{HTTP_HOST}/%2/$1/%3/? [L,R=301] //это я так понимаю нужно заменить на разделенное правило

RewriteRule ^([a-zA-Z]{2})/([-a-zA-Z_]+)/? $2.php?lang=$1 [QSA,L]


RewriteCond %{HTTP_HOST} ^www.mysite\.ru$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://mysite.ru [R=301,L]

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mysite.ru [NC]
RewriteRule \.(jpg|jpeg|png|gif|flv|mp3)$ http://mysite.ru/img/nohotlink.jpg [NC,R,L]

Options -Indexes

RewriteCond %{THE_REQUEST} (\?|&)lang=([a-z]{2}) [NC]
RewriteRule ^([a-z\d]+)\.php$ http://%{HTTP_HOST}/%2/$1/? [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.