301 редирект, mod_rewrite

12
Unlock
На сайте с 01.08.2004
Offline
786
2460

Люди, подскажите пожалуйста, как сделать 301 редирект для такого случая:

со страницы script.php?mode=name&text=Keyword&page=0 на страницу script.php?mode=name&text=keyword&page=0

со страницы script.php?mode=name&text=Keyword1+Keyword2&page=3 на страницу script.php?mode=name&text=keyword1+keyword2&page=3 т.е. надо сделать редирект со страниц где keyword начинается с заглавной буквы, на строчные.

И еще вопросик. Подскажите, можно ли подобные страницы через mod_rewrite преобразовывать в примерно в такой вид: /script/keyword/0 и /script/keyword1+keyword2/3 ?

Есть желание, - тысяча способов; нет желания, - тысяча поводов! /Петр-I/.
progress
На сайте с 11.07.2006
Offline
125
#1

Options +FollowSymLinks

RewriteEngine on

RewriteBase /

RewriteCond %{QUERY_STRING} !.

RewriteRule .* - [L]

RewriteRule (.*) $1\/%{QUERY_STRING}

RewriteRule (.*)&(.*) $1\/$2

RewriteRule (.*)=(.*) $1\/$2

RewriteRule (.*)&(.*) $1\/$2

RewriteRule (.*)=(.*) $1\/$2

RewriteRule (.*)&(.*) $1\/$2

RewriteRule (.*)=(.*) $1\/$2

RewriteRule (.*)&(.*) $1\/$2

RewriteRule (.*)=(.*) $1\/$2

RewriteRule (.*)&(.*) $1\/$2

RewriteRule (.*)=(.*) $1\/$2

RewriteRule (.*)Keyword(.*) $1keyword$2? [R=301,L]

RewriteRule (.*) $1? [R=301,L]

Вроде оно, только я так и не смог как нужно зациклить

RewriteRule (.*)&(.*) $1\/$2

RewriteRule (.*)=(.*) $1\/$2

поэтому и написал их несколько раз, вис нафиг апач, создавая дикий лог преобразований - может кто еще что подскажет?

Unlock
На сайте с 01.08.2004
Offline
786
#2

progress, спасибо. Буду разбираться, только я не соображу, где здесь редирект на урл со строчными буквами?

Да, и кейвордов может быть в урле больше двух, в теории до бесконечности много.

progress
На сайте с 11.07.2006
Offline
125
#3

Да, косячок небольшой, тут она среагирует только на один Keywords и сразу прыгнет в редирект - ща подумаю как еще сделать

mxp100
На сайте с 20.12.2006
Offline
49
#4

Если keyword'ов может быть бесконечно много, то скорее всего с помощью mod_rewrite наврятли получиться ИМХО

Проще и производительнее будет написать скрипт на том-же PHP который бы и отдавал бы нужные заголовки!

mxp100
На сайте с 20.12.2006
Offline
49
#5

по типу

<?

Header('HTTP/1.1 301 Moved Permanently');

Header('Location: '.strtolower($_SERVER["REQUEST_URI"]));

?>

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

Unlock
На сайте с 01.08.2004
Offline
786
#6
mxp100:
по типу
<?
Header('HTTP/1.1 301 Moved Permanently');
Header('Location: '.strtolower($_SERVER["REQUEST_URI"]));
?>
только учти что там весь запрос в нижний регистр пойдет

Как написать условие чтобы правило работало только для урлов содержащие заглавные буквы?

Shtogrin
На сайте с 02.11.2006
Offline
95
#7

Unlock, В самом скрипте script.php и обрабатывайте, если есть большие буквы, то Location на маленькие, если все маленькие скрипт генерирует страницу. Будет компактно и логично, не нужен здесь mod_rewrite.

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
Shtogrin
На сайте с 02.11.2006
Offline
95
#8
Unlock:
Подскажите, можно ли подобные страницы через mod_rewrite преобразовывать в примерно в такой вид: /script/keyword/0 и /script/keyword1+keyword2/3 ?

/script/keyword/0

RewriteRule ^script/(.*)/(.*) /script.php?mode=name&text=$1&page=$2

или так что-бы было похоже на файл, а не на каталог

/script/keyword/0.html

RewriteRule ^script/(.*)/(.*)\.html$ /script.php?mode=name&text=$1&page=$2

Если ключевое слово будет содержать большие буквы, они передадутся в script.php, а там надо сделать Location: /script/маленькие буквы/0 и будет вызван еще раз script.php для маленьких букв.

Unlock
На сайте с 01.08.2004
Offline
786
#9
Shtogrin:
Unlock, В самом скрипте script.php и обрабатывайте, если есть большие буквы, то Location на маленькие, если все маленькие скрипт генерирует страницу. Будет компактно и логично, не нужен здесь mod_rewrite.

Это понятно :) Просто к сожалению я далек от программирования и не соображу как определить что есть большие буквы? Как сделать редирект я знаю, а как написать условие, при котором должен производится редирект, не знаю. Мутно написал, или поняли что я имел ввиду?

Shtogrin
На сайте с 02.11.2006
Offline
95
#10

У вас кириллицы нет в адресе? В скрипте script.php в начале

if(isset($_GET['text']) && $_GET['text'] != strtolower($_GET['text']))

{
header('Location: '.strtolower($_SERVER['REQUEST_URI']));
exit (0);
}
12

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