Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Mod Rewrite
 
 автор: Eugene77   (02.05.2008 в 18:40)   письмо автору
 
 

Как бы мне так сделать, чтобы все запросы файлов, название которых начинается с буквы r
передавались файлу read.

Все запросы файлов, начинающихся с t - файлу this.

Например:

http://myhost.ru/one/two/last/rainbow.php?f=170&s=340 => http://myhost.ru/one/two/last/read.php?f=170&s=340

http://myhost.ru/one/two/last/rainbow.php?f=690&s=50790 => http://myhost.ru/one/two/last/read.php?f=690&s=50790

http://myhost.ru/one/two/last/thing.php?f=560&s=40 => http://myhost.ru/one/two/last/this.php?f=560&s=40

http://myhost.ru/one/two/last/rainbow.php => http://myhost.ru/one/two/last/read.php

И так далее .
Гет параметров может и не быть.

   
 
 автор: Eugene77   (04.05.2008 в 09:15)   письмо автору
 
   для: Eugene77   (02.05.2008 в 18:40)
 

Я вижу, что Апачи использует некий механизм регулярных выражений, но никак не могу взять в толк его особенность. Если бы это было Preg_replace, я бы написал регулярку, а для Апачи не могу сообразить как это делается.
Может мне что-то почитать, чтобы чётко уяснить разницу?

   
 
 автор: Eugene77   (05.05.2008 в 07:54)   письмо автору
 
   для: Eugene77   (02.05.2008 в 18:40)
 

Ура! Разобрался сам, хоть и долго экспериментировал.

RewriteCond %{REQUEST_FILENAME} .*/r([a-zA-Z]*).php(.*)
RewriteRule ^(.*)r([a-zA-Z]*)\.php(.*) $1read\.php$3

Эти строки перенаправляют запрос с любого файла, начинающегося с буквы r на файл read.php, передавая при этом аргументы.

1) Посмотрите, пожалуста насколько разумно это записано, может я намудрил лишнего?
2) У меня ещё осталась задача, все остальные файлы, то есть те, которые не удовлетворяют ни одному условию из списка(список будет на несколько букв), перенаправлять на страницу ошибок.

   
 
 автор: Atheist   (05.05.2008 в 14:03)   письмо автору
 
   для: Eugene77   (05.05.2008 в 07:54)
 

> Эти строки перенаправляют запрос с любого файла, начинающегося с буквы r на файл read.php, передавая при этом аргументы.
Неа. Только так:

RewriteRule ^(.*)r([a-zA-Z]*).php $1read.php?%{QUERY_STRING}

> RewriteCond %{REQUEST_FILENAME} .*/r([a-zA-Z]*).php(.*)
(.*) в конце надо заменить на $

   
 
 автор: Eugene77   (05.05.2008 в 20:32)   письмо автору
 
   для: Atheist   (05.05.2008 в 14:03)
 

Так действительно работает.
Но с чем связана такая строгость?:

>Неа. Только так:
>


В чём конкретное преимущество?
Просто красивее выглядит?
Да, согласен.
Но, может есть и другая причина?

Спасибо в любом случае!

   
 
 автор: Atheist   (05.05.2008 в 21:49)   письмо автору
 
   для: Eugene77   (05.05.2008 в 20:32)
 

> Но, может есть и другая причина?
Твой код по идее нерабочий, потому что в RewriteRule не попадает QUERY_STRING.

   
 
 автор: Eugene77   (06.05.2008 в 08:58)   письмо автору
 
   для: Atheist   (05.05.2008 в 21:49)
 

Он попадает в качестве 3-й переменной $3.
Разве не так?

   
 
 автор: Atheist   (06.05.2008 в 11:11)   письмо автору
 
   для: Eugene77   (06.05.2008 в 08:58)
 

Не так. Строка запроса в subject для RewriteRule не попадает.

   
 
 автор: Eugene77   (06.05.2008 в 20:22)   письмо автору
 
   для: Atheist   (06.05.2008 в 11:11)
 

>Не так. Строка запроса в subject для RewriteRule не попадает.
1. Скажите, а вы пробовали?
2. Какой у вас Апачи?

У меня GET параметры успешно передаются.
Повторю содержимое .htaccess
на случай, если вдруг где-то опечатка у меня.

RewriteCond %{REQUEST_FILENAME} .*_rd([a-zA-Z]*).php(.*)
RewriteRule ^(.*)_rd([a-zA-Z]*)\.php(.*) $1read\.php$3

Это реально действующий пример.
Файлы начинающиеся с _rd вместе с параметрами попадают в read.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования