Показать полную графическую версию : mod_rewrite etc.
Страниц :
1
2
3
4
5
[
6]
7
8
9
10
censore, первой строкой поставьте условие
RewriteCond %{REQUEST_URI} !(i|css|js)\/
и перед второй :)
Доброе всем время суток)
У меня такой вопрос -
хочу все запросы типа - http://сайт/любой текст/ перенаправлять к примеру на http://сайт/index.php . Так что бы урл сохранялся , а выполнялся именно этот файл. И конечно если папка существует пере адресацию не делать.
заранее спасибо)
LineDir, но это будет замена 404...RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]
Sham,
Огромнейшие спасибо!! Очень помогло)))
BASSON_XVI
14-07-2009, 21:42
Есть url вида http://localhost/sse/index.php/news/news/26/ нужно получить следующее http://localhost/sse/index.php&url=/news/news/26/
Или что ещё лучше было бы сделать так что бы пути всех стилей, картинок, бакраундов и скриптов были не такие http://localhost/sse/index.php/news/news/26/images/img.png , а такие http://localhost/sse/images/img.png.
Попробовал написать в .htaccess следующие:
RewriteEngine On
RewriteRule ^index\.php(.*)$ index.php&url=$1 [L]
Понятное дело безрезультатно! Что посоветуете?
RewriteRule ^index\.php(.*)$ index.php&url=$1 [L] »
1. параметры от файла отделяются знаком "?"
2. htaccess дб в папке корень/sse
Или что ещё лучше было бы сделать так что бы пути всех стилей, картинок, бакраундов и скриптов были не такие http://localhost/sse/index.php/news/...images/img.png , а такие http://localhost/sse/images/img.png. »
используйте корневые (с передним слешем) или абсолютные ссылки (с доменом или тегом base в html-коде)...
BASSON_XVI
14-07-2009, 23:10
Sham,
1.Параметры отделены /
2. .htaccess лежит в корень/sse/
используйте корневые (с передним слешем) или абсолютные ссылки (с доменом или тегом base в html-коде)...
Спасибо пока подходит :)
1.Параметры отделены / »
RewriteRule ^index\.php(.*)$ index.php?url=$1 [L]
корневые (с передним слешем) или абсолютные ссылки (с доменом или тегом base в html-коде)... »
*не ссылки а адреса в src и стилях...
strannik-06
24-07-2009, 11:57
Здравствуйте!
Возможно, эта тема уже поднималась, но бьюсь над задачей 3й день, не могу ничего найти подходящего к моему случаю.
Написал ЧПУ для сайта. Расставил на сайте ссылки вида Kategorija_1/page_1.html, в htaccess написал соот. правило
RewriteRule ^Kategorija_1/page_1.html(.*)$ index.php?&pid=107983&$1 [NC]
ЧПУ работает. Но по php ссылке index.php?&pid=107983 естественно тоже переходит. Появилась задача закрыть доступ по php ссылке, умные люди подсказали - 301 редирект. Перед первым правилом пишу в htaccess еще одно:
RewriteCond %{QUERY_STRING} ^(.+)pid=107983(.*)$
RewriteRule index.php http://mysite.com/Kategorija_1/page_1.html? [R=301,L]
Редирект срабатывает, но вот беда - после Rewrite сайт опять заглядывает в htaccess и отрабатывает первое правило. Затем заходит снова и отрабатывает второе. Происходит зацикливание.
Подскажите, как быть в этой ситуации? Возможно ли решение данной задачи вообще? Заранее спасибо!
вариантов можно кучу найти..
например, добавлять пустой параметр к урлу при срабатывании правила, а в случае редиректа проверять его отсутствие.
RewriteCond %{QUERY_STRING} pid\=107983
RewriteCond %{QUERY_STRING} !fortest\=1
RewriteRule index.php http://mysite.com/Kategorija_1/page_1.html? [R=301,L]
RewriteRule ^Kategorija_1/page_1.html$ index.php?pid=107983&fortest=1 [NC, QSA, L]
вообще то при наличии флага L в обоих правилах должно и так работать, но реальное действие этого флага мне до конца не понятно (и нигде подробного описания не нашел). т.е. есть два трактования:
1) правило последнее, и окончательный выход из всех правил;
2) только один цикл в самом правиле (а без флага L одно правило будет переписывать урл до тех пор, пока не будет совпадения).
опыт показывает, что утверждение 2 вернее...
User2010
29-07-2009, 13:57
Всем привет!
Вопрос следующий.
Проблема переадресации с помощью mod_rewrite.
имеется исходный url, например:
такой
http://www.example.com/index.php >хочется получить такой > http://www.example.com/
или
http://www.example.com/index.php?page10 >хочется получить такой > http://www.example.com/page10
или такой
http://www.example.com/index.php?xxx=yyyy&zzzz=wwww >хочется получить такой > http://www.example.com/xxx/yyyy/zzzz/wwww
или на худой конец такие:
http://www.example.com#xxx#yyyy#zzzz#wwww
Попытки решения:
1.
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1
преобразует
http://www.example.com/xxx=yyyy&zzzz=wwww
в
http://www.example.com/index.php?xxx=yyyy&zzzz=wwww
Просто убирает индексный файл и знак вопроса из URL.
2.
Второй способ не работает:
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_URI} [A-Za-z0-9]*
RewriteRule ^([A-Za-z0-9]*)$ index.php?$1
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_URI} [A-Za-z0-9]*#[A-Za-z0-9]*
RewriteRule ^([A-Za-z0-9]*)#?([A-Za-z0-9]*)$ index.php?$1=$2
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{THE_REQUEST} [A-Za-z0-9]*#[A-Za-z0-9]*#[A-Za-z0-9]*
RewriteRule ^([A-Za-z0-9]*)#([A-Za-z0-9]*)#([A-Za-z0-9]*)$ index.php?$1=$2&$3
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{THE_REQUEST} [A-Za-z0-9]*#[A-Za-z0-9]*#[A-Za-z0-9]*#[A-Za-z0-9]*
RewriteRule ^([A-Za-z0-9]*)#?([A-Za-z0-9]*)#?([A-Za-z0-9]*)#?([A-Za-z0-9]*)$ index.php?$1=$2&$3=$4
Не совсем понятно как сравнивать RewriteCond почему в данном примере сравнение не работает
3. Были и другие эксперименты но пока радостного мало
==================================================================
Основные сложности в том, что длинна адреса может меняться т.е.
от http://www.example.com/
до http://www.example.com/index.php?xxx=yyyy&zzzz=wwww (http://www.example.com/xxx/yyyy/zzzz/wwww)
и еще при использовании адресов типа http://www.example.com/xxx/yyyy/zzzz/wwww
браузер запрашивает файлы (css, img ...) при указании относительного адреса с базой для URL
http://www.example.com/xxx/yyyy/zzzz/wwww соотвественно http://www.example.com/xxx/yyyy/zzzz/
как лучше решить эту проблему в случае использования '/', можно использовать '#' но это не совсем то что надо.
Может знает стандартное решение данного вопроса. Буду благодарен, подскажите.
Благодарю за внимание!!!
http://www.example.com/index.php >хочется получить такой > http://www.example.com/ »
лучше директивой
DirectoryIndex index.php
http://www.example.com/index.php?page10 >хочется получить такой > http://www.example.com/page10 »
RewriteRule ^page([0-9]+)$ index.php?page$1 [L]
http://www.example.com/index.php?xxx=yyyy&zzzz=wwww >хочется получить такой > http://www.example.com/xxx/yyyy/zzzz/wwww »
RewriteRule ^([^\/]+)/([^\/]+)/([^\/]+)/([^\/]+)$ index.php?$1=$2&$3=$4 [L]
или на худой конец такие:
http://www.example.com#xxx#yyyy#zzzz#wwww »
так нельзя (# - рабочий символ)браузер запрашивает файлы (css, img ...) при указании относительного адреса с базой для URL »
при использовании псевдостатики все относительные адреса дб корневыми (с передним слешем или доменом), либо псевдостатика дб без директорий...
d0ublezer0
29-09-2009, 08:39
Привет всем. Пожалуйста помогите наладить перенаправление?
Перенесли сайт с тестового домена new.site.ru на основной домен _www.site.ru
И нужно сделать так, чтобы при обращении к тестовому домену (допустим с поисковиков) срабатывало перенаправление на основной домен.
К примеру, запрошена страница
new.site.ru/index.php?option=com_virtuemart&page=shop.browse
а нужно перекинуть на
_www.site.ru/index.php?option=com_virtuemart&page=shop.browse
Попробовал, почитав документацию и, по совету провайдера, сделать так:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^new\.site\.ru [NC]
RewriteRule ^/(.*) http://www.site.ru/$1 [R=301,L]
Поместил код в .htaccess и бросил его в DocumentRoot тестового сайта.
Ничего не происходит.
Что не так?
последняя строка
RewriteRule ^/?(.*)$ http://www.site.ru/$1 [R=301,L]
передний слеш, если правило в контексте сервера (в httpd.conf), в .htaccess отсекается...
Options +FollowSymlinks »
первой строкой лучше.
в итоге (с соблюдением регистров)
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^new\.site\.ru [NC]
RewriteRule ^/?(.*)$ http://www.site.ru/$1 [R=301,L]
d0ublezer0
29-09-2009, 15:24
Sham, спасибо огромное.
Тогда еще вопрос - а если страница на новом сайте не существует, то как перенаправить на главную?
d0ublezer0, добавьте ErrorDocument 404 http://www.site.ru
d0ublezer0
26-11-2009, 13:59
Пожалуйста помогите с такой задачей:
посл перенастройки SEF модуля на сайте поменялись все ссылки. А по поисковым сисмемам народ приходит на "старые адреса".
нужно поправить переход. Например придя по любой из ссылок:
http://example.com/vmchk/musornyie-konteyneryi/
http://example.com/vmchk/musornyie-konteyneryi/view-all-products.html
Посетитель должен попасть на
http://example.com/musornyie-konteyneryi.html
И тоже самое для WWW в начале адреса.
Т.е. убрать из строки vmchk/ и заменить последний слеш на .html
Спасибо.
RewriteRule ^vmchk\/([^\/]+) http://example.com/$1.html [R,L]
d0ublezer0
30-11-2009, 14:21
Sham, спасибо, только вот еще задача - некоторые ссылки уже имеют html в конце:
/vmchk/plastikovyie-bochki-i-bidonyi.html
И получается что по вашему правилу для них формируется два расширения .html
Как переделать?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.