|
|
|
| Ссылки имеют вид: add/index.php?page_id=23&foto=24_asd
А нужно, чтобы было так: index/23/24_asd
Делаю так:
Options +FollowSymlinks
RewriteEngine on
RewriteBase /add
RewriteRule ^.htaccess$ - [F]
RewriteCond %{QUERY_STRING} ^page_id=([0-9]+)&foto=([_A-Za-z0-9]+)$
RewriteRule ^add/index.php$ add/index/%1/%2 [L]
|
| |
|
|
|
|
|
|
|
для: Лена
(10.01.2009 в 23:52)
| |
RewriteEngine on
RewriteBase /
RewriteRule ^add/index/(\d+)/([[:alnum:]_]+)/?$ add/index.php?page_id=$1&foto=$2 [L]
|
http://domain.com/add/index/23/24_asd
->
http://domain.com/add/index.php?page_id=23&foto=24_asd
|
| |
|
|
|
|
|
|
|
для: sl1p
(11.01.2009 в 07:01)
| | Модуль должен работать только в папке add, а не на всем сервере.
Если от корня, то все получается:
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^.htaccess$ - [F]
RewriteCond %{QUERY_STRING} ([0-9]+)/([_A-Za-z0-9]+)
RewriteRule ^rewrite\.php?$ rewrite.php?page_id=%1&foto=%2 [L]
|
| |
|
|
|
|
автор: xx7 (11.01.2009 в 18:31) |
|
|
для: Лена
(11.01.2009 в 15:47)
| | впринципе особой разницы нет , написать-ли
RewriteBase /add/
RewriteRule ^index/.....
или написать
RewriteBase /
RewriteRule ^add/index/.....
RewriteCond %{QUERY_STRING} ([0-9]+)/([_A-Za-z0-9]+)
означает что идущее за ним правило RewriteRule будет проверяться только если после знака вопроса (?)
в адресе будут присутствовать цифр(а|ы) / и ещё например цифра
для обработки запросов типа /add/index/1/1/ это совсем не обязательно,
если нужны так-же другие GET - параметры , просто можно добавить флаг [QSA] к RewriteRule
или вы не хотите чтобы /add/index.php?page_id=23&foto=24_asd тоже отдавался этот /add/index.php
, а только на запрос index/23/24_asd ?
// всегда стараюсь применять [R] , на стадии проверки работы (можно хоть в адресной строке посмотреть на какой-же конкретно запрос изменяется)
//
попробуйте например
RewriteBase /add/
RewriteRule ^index/([0-9]+)/([0-9]+)_asd/?$ index.php?page_id=$1&foto=asd_$2 [L,QSA,R]
только не проверял , могут быть ошибки | |
|
|
|
|
|
|
|
для: xx7
(11.01.2009 в 18:31)
| | >или вы не хотите чтобы /add/index.php?page_id=23&foto=24_asd тоже отдавался этот /add/index.php
, а только на запрос index/23/24_asd ?
Не поняла, про что вы меня спрашиваете.
>// всегда стараюсь применять [R] , на стадии проверки работы
Чтобы посмотреть, что получается, я скрипт маленький составила:
<?php
if($_GET['page_id']&&$_GET['foto']){
echo "Все в порядке";
}else{
$foto = "<a href='?23/24_asd'>Галерея работ</a><br>";
echo $foto;
}
?>
|
| |
|
|
|
|
автор: xx7 (12.01.2009 в 01:19) |
|
|
для: Лена
(12.01.2009 в 00:19)
| | > if($_GET['page_id']&&$_GET['foto']){
это вызовет предупреждение типа Notice, даже два,) в случае если включён вывод таких предупреждений , и не установлены эти переменные , и наоборот не сработает , если $_GET['page_id'] == 0,
и вдруг на самом деле ещё чего непредвиденного добавляется в фактически получившийся запрос
, тогда без [R] никак :)
Насчёт того , это так, не вопрос , как-бы увлёкся мыслями :) просто по старым привычным запросам с кучей названий переменных , всёравно можно будет достать то что и по новым, человеко-понимаемым ;) | |
|
|
|
|
|
|
|
для: xx7
(12.01.2009 в 01:19)
| | [R] сделала, теперь вижу, куда ведет ссылка. :)
Вот это у меня получилось(модуль работает в конкретной папке):
Options +FollowSymlinks
RewriteEngine on
RewriteBase /add/
RewriteRule ^.htaccess$ - [F]
RewriteCond %{QUERY_STRING} ([0-9]+)/([_A-Za-z0-9]+)
RewriteRule ^rewrite\.php?$ rewrite.php?page_id=%1&foto=%2 [L,R]
|
А вот ваш вариант с [QSA] почему-то не получается. | |
|
|
|
|
|
|
|
для: Лена
(12.01.2009 в 00:19)
| | этот тест не от того метода.
в ссылке знак вопроса. | |
|
|
|
|
|
|
|
для: Trianon
(12.01.2009 в 11:11)
| | >этот тест не от того метода.
Почему?
>в ссылке знак вопроса.
В ссылке знак вопроса, который показывает, что дальше идет запрос, который передается с помощью GET-метода.
Вообще-то с этой "переделкой" ссылок с одной стороны - для пользователя это удобно, с другой стороны, тот, кто пишет скрипт, может здорово запутаться. Вот, например, есть у меня куча модулей, которые подключаются в зависимости от полученных гет-переменных. И есть у меня ссылки вида: ?23/24/25/26, плюс есть один файл со всеми правилами модреврайта. И как я смогу увидеть, что ссылка ?23/24/25/26 подчиняется какому-то конкретному правилу? Как я смогу увидеть, что вот эта ссылка, допустим, посылает гет-параметр page-id? Получается, чтобы не запутаться, нужно в каждую отдельную папку(папку, где содержатся все скрипты одного модуля) класть одно правило модреврайта, чтобы было видно, какие гет-переменные я получаю. | |
|
|
|
|
|
|
|
для: Лена
(12.01.2009 в 15:33)
| | вопрос не является необходимым условием при применении метода GET.
В ЧПУ обычно вопросов не оставляют.
В чем проявляется удобство пользователя - мне не понять. Но это субъективно.
В остальном - согласен. | |
|
|
|
|
|
|
|
для: Лена
(12.01.2009 в 15:33)
| | похоже совсем ничего уже не понимаю ,) зачем делать ЧПУ такое
, что смогут понять , какое оно не простое У ?
Уберайти этот вопрос оттуда, и всё станет просче , и безо всяких Cond :)
Там кстати не обозначено даже ^ и/или $, b и эти цифра и слово будут искаться не только там где должны-бы. могувт даже если запрос будет таким http://example.org/add/rewrite.php?br=opera+9/27+kruto
Для чего Вам такие запросы ?
пусть лучше фильтруются такие которые просто http://example.org/add/9/27/?zdes._tozhe_mozhno_dobavit.
и там где RewriteRule ^rewrite\.php?$ , p? означает что 'p' или есть , или её нет :) | |
|
|
|
|
|
|
|
для: xx77
(12.01.2009 в 17:28)
| | >и безо всяких Cond :)
Ладно, сделаю, как вы говорите:
RewriteEngine on
RewriteBase /add/
RewriteRule ^rewrite/([0-9]+)/([_A-Za-z0-9]+)$ rewrite.php?page_id=$1&foto=$2 [L,QSA,R]
|
А Cond оставлю про запас :) | |
|
|
|
|
автор: xx7 (12.01.2009 в 22:19) |
|
|
для: Лена
(12.01.2009 в 19:50)
| | Теперь наверное только стоит убрать [R] ,)
и насчёт QSA, незнаю бывают-ли нужны ещё другие параметры вашему rewrite.php :)
можно теперь ещё попробовать влепить cookie клиенту , так неосторожно набравшему именно ненастоящий адресс , например так
Options +FollowSymlinks
RewriteEngine On
RewriteBase /add/
RewriteRule ^rewrite/([0-9]+)/([_A-Za-z0-9]+)/?$ rewrite.php?page_id=$1&foto=$2 [L,QSA,CO=yes:popal:domain.adres:1440:/]
|
только добавил /? , чтобы адрес мог заканчиваться на слэш
И почему-то на денвере ничего не смог добиться , не cookie послать , не переменную окружения установить [E=X_PARAM:1]
(Впринципе это может быть как вариант отсеять вызывающих прямой адрес)
на хостинге работает | |
|
|
|
|
|
|
|
для: xx7
(12.01.2009 в 22:19)
| | Спасибо вам большое за помощь.
>и насчёт QSA, незнаю бывают-ли нужны ещё другие параметры вашему rewrite.php :)
Подождите. Давайте разберемся. Может, оно мне не нужно. Другие параметры, как я поняла, это если в мой запрос будут добавляться еще переменные, типа: rewrite.php?page_id=$1&foto=$2&text=$2. Так или не правильно? | |
|
|
|
|
автор: xx7 (13.01.2009 в 00:01) |
|
|
для: Лена
(12.01.2009 в 23:22)
| | не совсем.
просто можно будет набрать адрес http://domain.adres/add/rewrite/1/2/?escho=5
и запрос преобразуется в http://domain.adres/add/rewrite.php?page_id=1&foto=2&escho=5
можно конечно сделать например ^rewrite/([0-9]+)/([A-Za-z]+_[0-9]+)/?([0-9]+)?/?$
и принимать запросы как с двумя несуществующими названиями дирректорий , так и с тремя, но это уже другая история :) | |
|
|
|
|
автор: xx7 (13.01.2009 в 00:11) |
|
|
для: xx7
(13.01.2009 в 00:01)
| | что-то опять меняют в скриптах форума | |
|
|
|
|
|
|
|
для: xx7
(13.01.2009 в 00:01)
| | >просто можно будет набрать адрес http://domain.adres/add/rewrite/1/2/?escho=5
Все поняла и проверила. Получилось.
Спасибо. Тема закрыта. | |
|
|
|