htaccess, маленький вопрос

12
GoRSS
На сайте с 29.07.2013
Offline
138
#11

Спасибо, но уже помчался на php это делать. На деле оказывается проще, чем при планировании. Последний вопрос, и моя благодарность выходит за рамки границ.

RewriteEngine on
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{HTTP_HOST} www.joysea\.ru
RewriteRule ^(.*)$ http://joysea.ru/$1 [R=permanent,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://joysea.ru/ [R=301,L]
AddDefaultCharset UTF-8

RewriteRule ^([-a-zA-Z0-9_]+)/$ place.php?placesef=$1&place_id=(.) [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/photos.html$ place.php?placesef=$1&place_id=(.)&photo [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/karta.html$ place.php?placesef=$1&place_id=(.)&map [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/pogoda.html$ place.php?placesef=$1&place_id=(.)&pogoda [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/svodka.html$ place.php?placesef=$1&place_id=(.)&svodka [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/video.html$ place.php?placesef=$1&place_id=(.)&video [QSA,L]

RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+).html$ place.php?placesef=$1&place_id=(.)&art=(.)&artsef=$2 [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/$ place.php?placesef=$1&place_id=(.)&hotels=(.)&hotcatsef=$2 [QSA,L]

Каталоги не открываются. Насколько понимаю, отсутствует правило проверять на физическое нахождение файла/директории.

https://commersoft.ru - софт: Google Indexing [индексация в Гугле по API] - Webcontrol [мониторинг сайтов и доменов]
IW
На сайте с 16.12.2014
Offline
73
#12

Объясните мне дураку зачем в

RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/$ place.php?placesef=$1&place_id=(.)&hotels=(.)&hotcatsef=$2 [QSA,L] 

&place_id=(.)&hotels=(.)
???

и какие именно каталоги не открываются?

SSD VPS скидка 25% по купону iwork https://cp.inferno.name/cart.php?gid=23 | надежный хостинг http://bit.ly/2Yiq93h
siv1987
На сайте с 02.04.2009
Offline
427
#13
i-work:
Объясните мне дураку зачем в

Низачем. Автор либо сам не понимает зачем (хотя ему об этом говорили), либо это он таким интересным способом пытается объявить эти переменные в коде. Но вопрос, зачем? Значение абсолютно никакое, с таким же успехом можно просто тупо их убрать. Имхо, автор явно не хочет слушать то, что выходит за рамки его понимания.

RewriteRule ^([-a-zA-Z0-9_]+)/$ place.php?placesef=$1&place_id=(.) [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/photos.html$ place.php?placesef=$1&place_id=(.)&photo [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/karta.html$ place.php?placesef=$1&place_id=(.)&map [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/pogoda.html$ place.php?placesef=$1&place_id=(.)&pogoda [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/svodka.html$ place.php?placesef=$1&place_id=(.)&svodka [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/video.html$ place.php?placesef=$1&place_id=(.)&video [QSA,L]


RewriteRule ^([\w\-]+)/(?:(\w+)\.html)?$ place.php?placesef=$1&$2 [QSA,L]
GoRSS
На сайте с 29.07.2013
Offline
138
#14

Сам удивляюсь, что до сих пор не понял. Стоило бы изучить эту тему, но фронт работы толкает в гриву.

Логика моих действий:

Во всех путях обязательно присутствуют две переменные: placesef и place_id. По последней из них идет запрос к базе SELECT * FROM ... WHERE id='$place_id'.

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

RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+).html$ place.php?placesef=$1&place_id=(.)&art=(.)&artsef=$2 [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/$ place.php?placesef=$1&place_id=(.)&hotels=(.)&hotcatsef=$2 [QSA,L]

Если бы я написал RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+).html$ place.php?placesef=$1&place_id=$3&art=$4&artsef=$2 [QSA,L] не односиськой, а $номер, это значение появилось бы в урле? Экспериментировал, пока не ушло лишнее из урла.

Т.е. я могу запрос вида

RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+).html$ place.php?placesef=$1&place_id=(.)&art=(.)&artsef=$2 [QSA,L]
сократить до
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+).html$ place.php?placesef=$1&$3&$4&artsef=$2 [QSA,L]

и лишнее уйдет с темже успехом?

---------- Добавлено 22.12.2014 в 12:30 ----------

и какие именно каталоги не открываются?

Статичные папки, например http://joysea.ru/css/

IW
На сайте с 16.12.2014
Offline
73
#15

что вы привязались к этому ИД place_id? вы сами его выкинули из УРЛа, все нет его...

ваш апачь не экстрасенс, если вы ему этот ИЛД в урле не даете он его никак не выдаст в скрипт))


RewriteRule ^([-a-zA-Z0-9_]+)/$ place.php?placesef=$1 [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/photos.html$ place.php?placesef=$1&photo [QSA,L]

placesef - это новый ИД, по нему в скрипте находите данные нужные и выводите... или запросом по его значению находите place_id и дальше с ним работаете. хотя смысл? проще запросы поправить, повторяю placesef это новый ключ, в БД на него надо повесить индекс, и он должен быть уникальным в таблице.

тоже само для остальных таблиц

RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+).html$ place.php?placesef=$1&artsef=$2 [QSA,L]
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/$ place.php?placesef=$1&hotcatsef=$2 [QSA,L]

artsef - ключь статей, hotcatsef - ключь отелей, или что там они означают?

RewriteRule ^([-a-zA-Z0-9_]+)/photos.html$ place.php?placesef=$1&photo [QSA,L]

с этой строкой то же непонятно, что может означать &photo ?

как вы эту переменную вообще проверяете? в GET запросе передаются данные вида переменная=значение переменной...

по папкам - зачем вам открывать http://joysea.ru/css/ ? вы открываете файл http://joysea.ru/css/style.css он никак под ваши правила не попадает, или не должен.

если нужно какие-то папки исключить из реврайта добавьте вверху условие

RewriteCond %{REQUEST_URI} !^/папка(/)?$
siv1987
На сайте с 02.04.2009
Offline
427
#16
GoRSS:
Т.е. я могу запрос вида

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

GoRSS:
сократить до

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

GoRSS:
По последней из них идет запрос к базе SELECT * FROM ... WHERE id='$place_id'.

У вас $place_id = '(.)' какой тут еще может быть запрос? С таким значением, или с ним или без него результат будет тот же. Его следует выкинуть из реврайта, вам уже десятый раз об этом говорят.

GoRSS:
Если бы я написал RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+).html$ place.php?placesef=$1&place_id=$3&art=$4&artsef=$2 [QSA,L] не односиськой, а $номер, это значение появилось бы в урле? Экспериментировал, пока не ушло лишнее из урла.

Из какого урла? Для начала нужно понять, что есть адрес запроса и есть адрес реврайта. В адресе запроса (первая часть реврайта) ничего не появляется кроме того, что запросил пользователь, адрес реврайта - это собственно туда, куда нужно перенаправить запрос. И лишнее там ничего не может появляться, если эти данные небыли переданы пользователем. Включите уже мозг, и поймите наконец, что если значение place_id отсутствует в адресе запроса, значит и передавать дальше уже нечего.

$n - это ссылка на подмаску в регулярном выражении. Откуда здесь $3 и $4 если у вас только две группы?

GoRSS
На сайте с 29.07.2013
Offline
138
#17
с этой строкой то же непонятно, что может означать &photo ?

Ур может быть разным, place.php?place_id=2&photo или place.php?place_id=2&map или place.php?place_id=2&video

а дальше

if (isset($_GET[place_id])) {
if (isset($_GET[photo])) { ... }
else if (isset($_GET[map])) { ... }
else {...}
}

Теперь всё встало на места, спасибо всем.

siv1987
На сайте с 02.04.2009
Offline
427
#18
GoRSS:
if (isset($_GET[place_id])) {

place_id надо бы в скобках заключить..

Из реврайта place_id убрать.

В коде $place_id = $_GET['place_id'] ? (int) $_GET['place_id'] : 0;

GoRSS
На сайте с 29.07.2013
Offline
138
#19
place_id надо бы в скобках заключить..

$_GET[(place_id)] ??

IW
На сайте с 16.12.2014
Offline
73
#20

в кавычки) $_GET['place_id'] и во всех остальных переменных

12

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