jkm

Рейтинг
120
Регистрация
20.02.2014
ecabps:
Надо сделать 301 переадресацию с корневого запроса на mysite.ru на конкретную страницу типа mysite.ru/aaabbb.html.
При этом чтобы запросы вида mysite.ru/?abc обрабатывались без изменений.

RewriteCond %{QUERY_STRING} ^$

RewriteRule ^$ /aaabbb.html [R=301,L]

Ставить в начало файла выше остальных RewriteRule.

Neptoon:

#remove end-slash 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]


#remove .php and redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

Этот фрагмент заменить на такой:

#remove end-slash

RewriteRule ^(.+)/$ /$1 [R=301,L]


#remove .php and redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{DOCUMENT_ROOT}/$1/index.php -f
RewriteRule ^(.+)$ $1/index.php [L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

DirectorySlash off

Тогда при запросе /de будет вызван /de/index.php

Если удалить правило:

RewriteCond %{DOCUMENT_ROOT}/$1/index.php -f

RewriteRule ^(.+)$ $1/index.php [L]

То при запросе /de будет вызван /de.php

RewriteRule ^news/default\.asp$ /? [R=301,L]

Или

RewriteRule default\.asp /? [R=301,L]

RewriteRule ^getnews\.asp$ /? [R=301,L]

Да всё как обычно, если поставить правило в самый конец файла, то оно может не работать.

prowordpress, редирект нужно перенести в начало файла, чтобы он срабатывал до того, как правила для ЧПУ направят запрос на index.php.

RewriteCond %{QUERY_STRING} sef=hc

RewriteRule ^index.php$ https://selenia.com.ua/? [L,R=301]

Там если не добавить знак вопроса, то при редиректе останутся исходные GET параметры и произойдёт зацикливание на selenia.com.ua/?sef=hc

use_linux:
омг я уже его наизусть почти выучил. Я вот подумал, что проще наследоваться от класса pdo.
Кстати, я уже путать начал: директива use только трейты включает или классы тоже можно?

Ну если выучил, то зачем тут приплетать трейты. Метод PDO::query() выполняет SQL-запрос и возвращает результирующий набор в виде объекта PDOStatement или FALSE, если запрос выполнить не удалось.

$stmt = $this->db->query($sql);

Т.е. сохраняешь в переменную результат вызова. Потом проверяешь этот результат. Если там FALSE, то запрос выпольнить не удалось. Если запрос выполнен успешно, то в $stmt у тебя объект PDOStatement и уже можно вызывать $stmt->fetch(PDO::FETCH_OBJ).

use_linux:
Подскажите в чем ошибка? пхп выдает ошибку на 27 строке "вызов неопределенного метода PDO::fetch()"

Ну так всё верно тебе говорит нет PDO::fetch(), есть PDOStatement::fetch().

https://www.php.net/manual/ru/book.pdo.php

RewriteRule ^([^/]+/)1$ /$1 [R=301,L]

akill, такое бывает если ставить редирект после правил для ЧПУ. Так что редирект нужно ставить выше остальных правил, чтобы он срабатывал до того как другие правила поменяют запрос на /index.php?cat=

Всего: 749