|
|
|
| Ан нет...испробовал все знающие методы, причем задача элементарная!
Знаю я по mod_rewrite не много, вероятно поэтому что-то упускаю. После долгих мучений один на один с этой задачей прошу помочь мне.
http://www.php.com/directory/index.php?cat1=computers-2005&cat2=programming2-php
перевожу в красивый вид
http://www.php.com/directory/computers-2005/programming2-php.html
В папку directory ложу .htaccess со следующим содержание:
RewriteEngine on
RewriteBase /directory/
RewriteRule ^(.*)/$ index.php?cat1=$1
RewriteRule ^(.*)/(.*).html$ index.php?cat=$1&cat2=$2
Все работает!
НО, не отрабатывает когда нет в конце слеша: http://www.php.com/directory/computers-2005
Со слешом все работает.
Какие могут быть пути решения? Как побороть? | |
|
|
|
|
|
|
|
для: Max7
(05.09.2005 в 11:12)
| | Попробуйте вот этот вариант
RewriteRule ^(.*)/(.*)\.html$ index.php?cat=$1&cat2=$2
RewriteRule ^([^/]*)/$ index.php?cat1=$1
RewriteRule ^([^/.]*)$ index.php?cat1=$1
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(06.09.2005 в 06:06)
| | Ну ты и гений! Спасибо! Я много форумов перерыл, нигде не смогли помочь.
Для поисковиков такой вариат правильнее будет? Как реагируют поисковики на такой редирект?
RewriteRule ^(.*)/(.*)\.html$ index.php?cat1=$1&cat2=$2
RewriteRule ^([^/]*)/$ index.php?cat1=$1
RewriteRule ^([^/.]*)$ $1/ [R] | |
|
|
|
|
|
|
|
для: Max7
(06.09.2005 в 08:40)
| |
RewriteRule ^([^/.]*)$ $1/ [R]
|
Я думаю, что им будет все равно. Они даже разницы не заметят.
Ведь такой запрос все равно неявно выполняется если нет слеша. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(08.09.2005 в 05:28)
| | НЕ разу не работал с модом. Прошо помочь :)
От установки до разбития.
Пример url:
http://phpcom.ru/index.php?a=1&b=2&c=3
в
http://phpcom.ru/1/2/3
Надеюсь на помощь :)) | |
|
|
|
|
|
|
|
для: Akira
(09.09.2005 в 01:29)
| | [code]
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/*$ index.php?a=$1&b=$2&c=$3
[code]
При запросе URL
http://phpcom.ru/1/2/3
Реально будет произведено обращение к
http://phpcom.ru/index.php?a=1&b=2&c=3 | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(10.09.2005 в 06:24)
| |
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/*$ index.php?a=$1&b=$2&c=$3
|
Options +FollowSymlinks - что это обозначает?
Я понял, что работа идет с рег. выражениями? Ищет совпадения аля preg_replace? | |
|
|
|
|
|
|
|
для: Akira
(11.09.2005 в 03:30)
| | Options +FollowSymlinks включает символические ссылки. Она обязательно должна быть включена для преобразования URL.
>Я понял, что работа идет с рег. выражениями? Ищет совпадения аля preg_replace?
В основном, да. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(08.09.2005 в 05:28)
| | Дизайнер, я не могу добиться идеального mod_rewrite-а.
----
Вот 1 код:
RewriteEngine on
RewriteBase /directory/
RewriteRule ^(.*)/(.*)\.html$ index.php?cat1=$1&cat=$2
RewriteRule ^([^/]*)/$ index.php?cat1=$1
RewriteRule ^([^/.]*)$ $1/ [R]
При таком коде все хорошо работает, но когда запрашиваешь http://www.php.com/directory/ , то он редиректит на http://www.php.com/
----
----
Вот 2 код:
RewriteEngine on
RewriteBase /directory/
RewriteRule ^(.*)/(.*)\.html$ index.php?cat1=$1&cat=$2
RewriteRule ^([^/]*)/$ index.php?cat1=$1
RewriteRule ^([^/.]*)$ index.php?cat1=$1
При таком коде тоже все хорошо работает, но когда запрашиваешь http://www.php.com/directory/ , то cat1 = "". А у меня в directory индексная страница index.html и хотелось бы, чтобы она выдавалась. index.html приоритнее чем index.php
----
Идеальнее лучше 1 код. Возможно то, что я хочу? Как это сделать? | |
|
|
|
|
|
|
|
для: Max7
(10.09.2005 в 22:17)
| | Хм… так у нас же вообще неправильное рег. выражение. Там одна директория упущено.
Посмотрите вот этот код.
RewriteRule ^([^/]+)/([^/]+)$ index.php?cat1=$2
RewriteRule ^([^/]+)/([^/]+)/$ index.php?cat1=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)\.html$ index.php?cat1=$2&cat2=$3
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(11.09.2005 в 05:40)
| | Нет...нет....htaccess я ложу в папку directory и задаю RewriteBase /directory/ | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(11.09.2005 в 05:40)
| |
RewriteRule ^([^/]+)/([^/]+)$ index.php?cat1=$2
RewriteRule ^([^/]+)/([^/]+)/$ index.php?cat1=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+).html$
index.php?cat1=$2&cat2=$3
|
Данный код вообще не отрабатывает, если даже помещаешь его в главную директорию. | |
|
|
|
|
|
|
|
для: Max7
(13.09.2005 в 07:54)
| | - | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(15.09.2005 в 06:15)
| | А как написать, что бы вместо http://site.com/index.php?id=1
было http://site.com/1.html???
У меня в .htaccess
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^/.]*)$ index.php?id=$1
|
И все работает, т.е вместо http://site.com/index.php?id=1
получается http://site.com/1
Но мне нужно http://site.com/1.html
что еще нужно добавить? | |
|
|
|
|
|
|
|
для: Max7
(13.09.2005 в 07:54)
| |
DirectoryIndex index.html index.php
RewriteEngine on
Options FollowSymlinks
RewriteBase /
RewriteRule ^(.*)/(.*)\.html$ index.php?cat1=$1&cat=$2
RewriteRule ^([^/]+)/$ index.php?cat1=$1
RewriteRule ^([^/]+)$ index.php?cat1=$1
|
Поместил в подпапку и проверил работу вариантов:
http://test/dir/ - открывается index.html
http://test/dir/2
http://test/dir/2/
http://test/dir/2/3.html
Это перебрасывает на dir/index.php с передачей параметров. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(15.09.2005 в 06:25)
| | Спасибо! Работает. | |
|
|
|
|
|
|
|
для: Max7
(15.09.2005 в 18:01)
| | А как сделать, в каких папка не надо выполнять rewrite? | |
|
|
|
|
|
|
|
для: Akira
(20.10.2005 в 00:40)
| | Мне видится 2 варианта
1. Поместить файлы htaccess только в те директории, где они должны выполняьтся.
2. Установить соответствующие правила RewriteRule, в которых бы прямо указывались директории, например
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^dir1/(.*)$ /newdir/index.php?$1
RewriteRule ^dir2/(.*)$ /newdir/index.php?$1
RewriteRule ^dir3/(.*)$ /newdir/index.php?$1
|
Здесь преобразования выполняются, только если производится обращение к директориям
dir1, dir2, dir3 | |
|
|
|