![]() |
mod_rewrite etc.
Вот только недавно познакомился с этим замечательным модулем
Вот что я вынес из данного знакомства-с помощью mod_rewrite можно: 1) Самое распространённое использование-перезапись урлов, например есть урл index.php?forum=webmaster&topic=45 можно переписать в index.php/webmaster/45, что для некоторых поисковых машин намного более лучший вариант 2)запретить доступ к определённому файлу RewriteRule ^file.ext$ - [F] 3)запретить доступ определённому браузеру, сборщику почты, доступ с определённого айпи или пришедшим с определённого сайта RewriteCond %{HTTP_USER_AGENT} ^Browser_Name [OR] RewriteCond % {REMOTE_HOST} ^www.badsite.com$ [OR] RewriteCond % {REMOTE_ADDR} ^169.45.23.01$ RewriteRule ^.*$ - [F] Это было самое распространённое применение данного модуля, но есть ещё много всяких интересных хитростей: наприсер я недавно нашёл такое применение-при вызове страницы pic.html, нужно показывать картинку дня, поэтому можно переписать этот урл в pic-06-06.html c помощью серверных переменных TIME_MON и TIME_DAY RewriteRule ^pic.html$ pic-%{TIME_MON}-%{TIME_DAY}.html Или ещё кому нравится можно переписать файл index.php кому очень захочется :) в index.bmp Если кто ещё знает интересные применения данного модуля, то постите тут |
русский первод доков
еще и т.д. см. * на opennet А *вот проблемы и достижения в форумах *(все по тому же сайту) а если реально кто чего еще интересного делает, то я тоже с удовольствием послушаю :) [s]Исправлено: mar, 0:11 9-06-2004[/s] |
mar, к тебе тоже нижайшая просьба оформлять ссылки тегами форума. Пусть и не длинные ссылки, но смотрятся как-то... хм... не эстетично :). Не говорю уж о длинющих.
|
Prisoner извинямс :user:
|
Prisoner-это по настоящему всё от лени можно же просто взять и скопировать из адресной строки браузра :) Но мы будем исправлятся:)
mar У меня тут возникла такая проблема: надо переписывать адреса такого типа www.site.com/lalala в www.site.com/file.php?var=lalala - это без проблем получается, но у меня в этой же директории есть ещё папки, которые должны вызыватся как обычные папки и адрес на них не должен переписыватся Я думал, так может пройти: RewriteCond %{REQUEST_URI} !-d но почему то не проходит :( приходится каждую папку по отдельности перечислять: RewriteCond %{REQUEST_URI} !papka_name А если создам новою важную папку и забуду RewriteCond дописать, то ничего хорошего из этого не выйдет, нужен какой то общий вариант, чтобы все папки отсекал |
vadimiron
не знаю, я ведь им не пользуюсь, хотя знаю, что есть очень большие любители :) Мне не нравятся длинные ссылки в скриптах (и с ними не всегда можно защет POST cладить.) Но аналогично длинная система каталогов мне нравится, пожалуй, еще меньше :( На сайты же ходят не только поисковики, но и люди :) А что касается твоего вопроса - там, намколько мне помнится можно: - поиграть regexp-ами - подставить обрабатывающий скрипт (ну, он может, например, проверять реальное дерево каталогов и запрещать его переписывать) Но это все общие соображения. Своего опыта работы с модулем у меня нет. |
Делать мне было нечего и решил я по данной теме маленькую статью накатать :)
Надеюсь кому нибудь поможет. Ссылки на официальный мануал (перевод на русский): Мануал Ну сначало, проверьте, установлен ли этот модуль у вас. Внимание: это спец модуль к апачу, с другими серверами он *не работает. Все команды данного модуля пишуться в файл .htaccess, причём если уже что то в данном файле стоит, то можно смело писать со следущей строки. Команды модуля состоят из определённых директив, вот они : RewriteEngine RewriteBase RewriteCond RewriteLock RewriteLog RewriteLogLevel RewriteMap RewriteOptions RewriteRule Скажу честно, что не всеми директивами я пока владею, но всё основное сейчас опишу. Начинается вся красота с включения модуля Код:
RewriteEngine on Вторая обязательная строчка, без которой механизм преобразований работать не будет: Код:
Options +FollowSymlinks Следущей обязательной командой нужно определить базовый URL (область) работы модуля, этим занимается директива RewriteBase: Код:
RewriteBase / Следущая интересная директива это RewriteLog, как ни сложно догадаться, она служит для определения файла ведения логов работы модуля. Пример из мануала: Код:
RewriteLog "/usr/local/var/apache/logs/rewrite.log" Ну а теперь самое интересное: директива RewriteRule-она как раз занимается обработкой и перезаписью урлов (и не только этим). На каждое правило пишется свой RewriteRule. Также очень важен порядок, надо следить, чтобы второй RewriteRule не испортил работу первого RewriteRule, то есть чтобы они не пересекались. В общем виде выглядит это так: Код:
RewriteRule шаблон действие Также следует отметить, что в RewriteRule и RewriteCond(следует ниже) можно использовать переменные сервера (%{VARNAME}) (их полный список в официальном мануале). Ну теперь перейдём к простому примеру: Код:
RewriteRule ^file.ext$ - [F] $ якорь конца строки file.ext какой то любой файл [F] флаг, обозначающий запрещение. То есть вся строка обозначает, что при вызове данного файла будет выдана ошибка номер 403. Следущий пример: перед нами стоит задача-вместо такого урла topic.cgi?forum=20&topic=1089, получать такой topic.cgi/20/1089 Код:
RewriteRule ^topic\.cgi/(\d{,2})/(\d{,5})$ topic.cgi?forum=$1&topic=$2 Теперь как действует предыдущий пример: есть например такой запрос topic.cgi/20/1089, данная строка сверяется с шаблоном и если строка совпадает с шаблоном, что и происходит в нашем случае, урл трансформируется в topic.cgi?forum=20&topic=1089 и далее идёт вызов именно этого урла. 20 в нашем случае = $1 ( то есть(\d{,2}) ), а 1089-$2 ( то есть(\d{,5}) ). Ещё один пример: мы перенесли папку soccer из корня сайта в папку sport, и не хотим переписывать все ссылки (ну и ссылки в избранном юзеров мы не сможем поменять) Код:
RewriteRule ^soccer/(.*)$ sport/soccer/$1 Следует отметить, что RewriteRule не так часто употребляется в одиночестве, чаще его действие ограничивается условием, когда может выполняться данный RewriteRule. Условие выполнено в виде отдельной директивы RewriteCond. Главное здесь, что условие должно быть прописано перед правилом. На одно правило может приходится несколько условий (все эти условия должны быть выполнеными, чтобы перейти к выполнению правила, но также условия можно связать словом "или"-для этого в конце каждого условия, кроме последнего, ставится флаг [OR]). В общем виде условие выглядит так: RewriteCond СравниваемаяСтрока Условие СравниваемаяСтрока в 99% выражается серверной переменной (но также может быть простым текстом с использованием например переменной($1, $2, $3...), созданной в правиле, к которому относится данное условие), условие же это шаблон, то есть регулярное выражение с некоторыми дополнениями. Данные дополнения выписываю просто из мануала: '<Условие' (лексически меньше) Условие считается простой строкой и *лексически сравнивается с СравниваемаяСтрока. Истинно если СравниваемаяСтрока лексически меньше чем Условие. '>Условие' (лексически больше) Условие считается простой строкой и *лексически сравнивается с СравниваемаяСтрока. Истинно если СравниваемаяСтрока лексически больше чем Условие. '=Условие' (лексически равно) Условие считается простой строкой и лексически сравнивается с СравниваемаяСтрока. Истинно если СравниваемаяСтрока лексически равно Условие, т.е. эти две строки полностью одинаковы (символ в символ). Если Условие имеет вид "" (два знака дюйма идущих подряд) это сравнивает СравниваемаяСтрока с пустой строкой. '-d' (является ли каталогом) СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является каталогом. '-f' (является ли обычным файлом) СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является обычным файлом. '-s' (является ли обычным файлом с ненулевым размером) СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является обычным файлом, размер которого больше нуля. '-l' (является ли символической ссылкой) СравниваемаяСтрока считается путем, проверяется существование этого пути и то что этот путь является символической ссылкой. '-F' (проверка существования файла через подзапрос) Проверяет через все списки контроля доступа сервера, существующие в настоящий момент, является ли СравниваемаяСтрока существующим файлом, доступным по этому пути. Для этой проверки используется внутренний подзапрос, поэтому используйте эту опцию с осторожностью *— это отрицательно сказывается на производительности сервера! '-U' (проверка существования URL через подзапрос) Проверяет через все списки контроля доступа сервера, существующие в настоящий момент, является ли СравниваемаяСтрока существующим URL, доступным по этому пути. Для этой проверки используется внутренний подзапрос, поэтому используйте эту опцию с осторожностью *— это отрицательно сказывается на производительности сервера! Пример Код:
RewriteCond %{REMOTE_ADDR} ^212.37.64.23$ Код:
RewriteCond %{REMOTE_HOST} ^www.somesite.com$ Код:
RewriteCond %{REQUEST_URI} !uri1 Вроде, если в кратце рассказывать-это всё. Ещё пару интересных примеров, которые я нашёл на различных сайтах: Пример 1 Код:
Цель – показать посетителям «фото дня». Посетитель, кликнувший по ссылке http://yoursite.com/pic.html увидит лучшую Код:
Проблема отсутствующего завершающего слэша Код:
Поиск страниц больше чем в одном каталоге И наполедок ещё две директивы: RewriteMap и относящиеся к ней RewriteLock. Директива RewriteMap-ассоциативный массив преобразований, который может быть использован в правилах преобразований и использующий соответствующие функции для вставки/извлечения элементов, для поиска по ключу соответствующих значений. Источник этого поиска может иметь различный тип. Но я этим не умею пользоваться, подробности смотрим в мануале. [s]Исправлено: Prisoner, 3:43 29-08-2004[/s] |
а мне тут приспичило закрывать доступ скрипткидесам (ну достали, прямо скажем)
вот вариант - когда закрывается доступ списку ip и машин: Цитата:
Добавлено: хм, печально, но факт - для броузеров вышеперечисленные мной запреты честно генерят отлупы, а вот от такой штуки не спасают: telnet ххх.ххх.ххх.ххх 80 Trying ххх.ххх.ххх.ххх... Connected to ххх.ххх.ххх.ххх. Escape character is '^]'. то есть пустили по http порту и ничем наш модуль не помог :( |
Вот блуждал по инертену и наткнулся вот на что, на сайте
http://www.apache.tut.ru/ кликая по ссылке в которой прописано http://far.h1.ru/serv/apache/#c2 попадаешь опять на этот адрес http://www.apache.tut.ru/ как это реализовано? По какой ссылке нажмешь в стусно строке остается все тожа и страницу грузится по другим ссылкам. Вобмщем вопрос такой :)) как сделать чтобы в статусной сроке было прописано к примеру http://www.apache.tut.ru/ но загружались страницы http://far.h1.ru/serv/apache/#c2 http://far.h1.ru/serv/apache/#c3 http://far.h1.ru/serv/apache/#c3 в зависимости от того по какой из сылок перейти |
Не совсем понятный вопрос, если честно. В описании имеет место быть банальный редирект. Поглядите окументацию и примеры приведенные выше. Это вам необходимо.
|
CodeMaker, Prisoner
Не, там просто фреймовая структура реализована Материнский фрейм занимает всю страницу, но ничего не отображает, а весь контент находится в дочернем фрейме, который тоже занимает всю страницу, но ложиться сверху на материнский, то есть при нажатии на ссылки происходить загрузка в дочку, а по правилам браузера в адресной строки всегда стоит адрес матери, и так как в маму ничего не грузим, то и адрес не меняется |
Может кто знает... с помощью mod_rewrite надо очень решить такую задачку:
Есть сервер А на котором несуществующая ссылка типа http://serverA.com/top/ Нужно, чтобы открылся скрипт тор-листа, но на сервере B, где он и установлен. И при этом важно, чтобы URL в строке запроса оставался http://serverA.com/top/ даже если перехожу по относительным ссылкам этого скрипта. То есть, если понятнее - надо показывать папку сайта В под своим доменом (сайт А). Типа это моя папка.... :) |
Примерно так:
PHP код:
|
:sorry:
извиняюсь, читал-читал, пытался, но так и не получилось, чтобы URL типа site.net/?action=view записывался как site.net/view или просто как site.net, чтобы все срезалось. Такое возможно? |
Наверно так должно получится-
RewriteRule ^\?action\=view(.*) http://www.site.net$1 Но я не уверен, уже были похожие проблемки - ?action=view содержит символы - ?=, советуют их экранировать \ попробуй, может получится. посмотри еще есть две классные статьи с примерами - http://www.egoroff.spb.ru/ |
Вообще задача такая: чтобы запрос вида test.php?d=.. был виден в строке браузера как просто test.php или еще что-нить левое. чтобы скрыть передаваемые перменные. такое возможно?
|
Можно скрыть в других данных: test/fh483jfg89e83mjr9j4. Тут мусор слева и справа можно генерить случайным образом, но определенной длины, т.о. найти необходимое не составит труда - в примере некий параметр пусть будет равен 89. Иначе, имхо, только с финтами ушами более финтового порядка: кукисы, POST запросы, фреймы.
|
Кстати, почему данный модуль не работает на Win32?
|
Отчего же... проверьте все еще раз, все корректно работает, впервые слышу о таком.
|
Гм.... что нужно сделать что бы заработал модуль? По сути расскоментировать две строки в конфигурационном файле апача. Я все сделал - не работает.
|
угу, а еще сконфигурировать правила и опции в .htaccess, что в корне сайта будет.
К примеру Код:
RewriteEngine on |
Да все я это сконфигурировал и htaccess правильный. На удаленном хостинге работает. А на моем win32 домашнем - Нет. Апач 1.3.23. Ошибка 404 нет такой страницы ;(
|
benya можно попробовать писать полные пути а не относительные
|
Нет я уже разобрался. htacess то по умолчанию выключен. Вот и вся проблема. Работает.
|
Подскажите как сделать чтобы вот так было: есть файлы в корне сайта типа about.php, contact.php, index.php и т.п. и их можно было-бы вызывать например вот так: http://www.site.com/about или например, http://www.site.com/index.php?about.
Если можно, приведите пожалуйста полный листинг того, что надо добавить в .htaccess. Заранее благодарен. |
Код:
RewriteEngine on |
Prisoner
Не получается, ошибка 403. |
Какая интересная тема! Я ее обязательно прочитаю целиком, если вы скажете можно ли сделать следующую вещь. Есть поддомен unattended.oszone.net (некоторые о нем даже знают ;-), но все материалы уже давно переехали и главная страница находится тут http://oszone.net/display.php?id=2747
Когда осуществлялся переезд я где-то вычитал про htaccess (o котором вообще понятия не имел) и сделал Код:
RedirectMatch seeother ^/(.+)$ http://oszone.net/display.php?id=2747 Код:
http://oszone.net/display.php?id=2747 Код:
http://unattended.oszone.net |
Это внешний редирект используется. Можно попробовать (для относительных ссылок на unattended.oszone.net) применить правило для внутреннего редиректа чего бы то ни было на oszone.net. Тогда часть .htaccess ответственная за это дело примет вид:
RewriteEngine on RewriteCond %{SERVER_NAME} ^unattended.oszone.net$ RewriteRule ^(.+)[\/]{0,1}$ http://oszone.net/$1?%{QUERY_STRING} Пример бы имел практический смысл, если бы не делал тоже самое, что выше - не менял адрес в адресной строке. Но, насколько я понял без внешнего редиректа (когда сервер в силу каких-то причин отправляет броузеру заголовочную информацию о смене адреса) с домена на домен не обойтись. Прошу коллег поправить меня, если я ввожу в заблуждение уважаемого модератора. |
Prisoner
Спасибо за ответ. Возможно, я не совсем подробно об'яснил, а еще не исключено, что я выбрал совсем не ту тему для вопроса. Попробую пояснить в меру моих весьма скромных знаний в данной области. Когда поддомен был создан, я получил данные для соединения по FTP: IP, username/pass. После установки соединения я попадал в каталог с cgi-bin\ html\ logs\ В html все мои файлы и лежали. Туда же в итоге я кинул свой htaccess. Мне никто толком даже об'яснить не мог как нормально редирект сделать :) Так что я нарыл что-то в гугле... Теперь все, что я хочу сделать - это отображать другой адрес в адресной строке. Т.е. не адрес страницы, отдаваемой движком сервера, а поддоменное имя. Возможно ли такое вообще? Может надо действовать иными методами и mod_rewrite тут вообще не причем? |
Vadikan
А доступ к конфигу Apache есть?? Тогда можно сделать виртуальный хост |
vadimiron
Есть. А что надо сделать конкретно? |
VadikanФлаг P делает подзапрос (скрытый для клиента) с помощью модуля mod_proxy. Если этого модуля нет, то не судьба...
|
Sham
Значит можно все-таки? :) Но я не вижу где указан домен, который должен отображаться: http://unattended.oszone.net/ Цитата:
|
Vadikan
У тебя ж .htaccess в поддомене unattended? Значит на любой URL (на этот поддомен) в соотв. с регуляркой будет подзапрос на реальный сайт (второй URL), и первый URL в строке браузера останется (подзапрос то скрытый, браузер ни о чем не догадывается :)). здесь также уточнил на случай ссылки вида unattended.oszone.net/display.php?* (флаг L чтобы правило не циклило): Код:
RewriteEngine on Насчет mod_proxy. Надо посмотреть в phpinfo() в loaded modules. Если нету там, то открой httpd.conf и раскоменть строку LoadModule proxy_module modules/mod_proxy.so (убери #). |
Sham
Спасибо за развернутый ответ. Надо поэкспериментировать. Пока что после переезда на новый сервер перестало работать то, что было раньше Код:
RedirectMatch seeother ^/(.+)$ http://oszone.net/display.php?id=2747 Цитата:
|
Vadikan
А поясни, пожалуйста, зачем у тебя в строке seeother? Вообще, маркеры (^$) не нужны там. И скобки тоже (подстановку то не делаем). Как говорится, будь проще... Код:
RedirectMatch .* http://oszone.net/display.php?id=2747 Цитата:
|
Sham
Цитата:
У меня сейчас нет доступа никуда все равно, так что я могу только просить все это сделать... Спасибо за помощь. |
Привет всем :)
А как можно сделать с помощью rewrite_mod, чтобы вместо "битых" картинок в форуме отображалась какая-нибудь одна и та же. Например кто-нибудь с помощью тега [img] выложил картинку, а через некоторое время картинки не стало физически.. чтобы не было пустого прямоугольника. |
Siava one
нужно настраивать скорее всего не rewrite_mod а то что отсылается в случае если файл не найден. |
Siava one
попробуй это Код:
RewriteCond %{THE_REQUEST} .+\.(jpg|gif|png|jpeg|bmp|tiff)$ |
Sham
Спасибо, вот только не работает этот вариант :( Я его и видоизменял по-всякому, ничего не выходит. |
Siava one
А на чём написан сайт?? Если не просто ХТМЛ, а например, ПХП, то лучше такое на уровне скрипта делать |
vadimiron
На PHP, но я надеялся, что с mod_rewrite можно сделать универсальное решение. |
Siava one
А почему вы демаете, что с mod_rewrite - универсальное решение?? А если другой вебсервак?? Или отключён mod_rewrite модуль?? |
Siava one
Я надеюсь, ты не думаешь, что с mod_rewrite можно управлять другим сервером :) ? В таких случаях я, например, внутри цикла формирования таблицы шерстил весь текст регуляркой на наличие тега(ов) IMG и src, вытаскивал URL(ы), а потом if (fopen(URL...))... ну и т.д. Но это сильно замедляет процесс... Вообще то надо бы поточнее инфу, где твоя картинка лежит, где картинки юзеров. В начале еще ставить надо RewriteEngine On (забыл)... Конкретику давай, будет тебе код конкретный :kruto: :) |
vadimiron
Хм.. Интересный вопрос =) Sham Ладно, вот конкретика :) Имеется скрипт, с помощью которого народ загружает картинки, а потом выставляет их в форуме/дневниках. Вот адрес одной из таких картинок (5кб). А Вот адрес одной из тем форума, куда может быть вставлена картинка. А далее, картинку удалили, в теме осталась дырка. Как этого избежать, автоматически залатав дырку какой-нибудь специальной картинкой через rewrite_mod? :) Вроде изложил :D |
Siava one
Код:
RewriteEngine On |
Siava one
Правда, зачем так мучиться?? Функция file_exists() и все дела |
Sham
Ваш код работает! Спасибо! :) vadimiron А как через file_exists() проверять в уже написанных постах? Лишняя нагрузка по-моему. |
Цитата:
Хотя с mod_rewrite тоже интересное решение, главное чтобы работало |
Siava one
Цитата:
|
у меня затык)
надо сделать: редирект для тех кто приходит с http://site.ru/k9/send.php?value=5&page=1-9 на http://site.ru/k3/send.php?value=97&page=1-9 т.е. чтобы все page со значением (может быть любое через дефис или нижнее подчеркивание) работали как параметры метода get на урле куда они редиректятся (там скрипт) все ссылки устроены так что те что были раньше по k9 должны ссылаться на k3 (директорию k9 удалили, создали директорию k3, и все соджержимое перенесли туда) value - это переменная содержащая значение id страницы в базе, после переноса индексы поменялись, но четкие соответствия новых и старых значений - есть значение page никак не должно менятся после редиректа, но она может быть любыми цыфрами через дефис (пользователь может захотеть посмотреть выборочно страницы скрипт их принемает как параметр get) ---- что делать?:) |
E-mail
Код:
RewriteEngine On |
Цитата:
там их много, например при вызове value=7 скрипт должен получать именно value=109 и при вызове именно value=50 скрипт должен получать именно value=2 и т.д. Sham спасибо тебе большое! завтра(сегодня уже) утром попробую:) |
E-mail
Если так (ты бы сразу весь расклад дал), то этот вариант будет лучше. Special for you. :) Код:
## этот код до черты в .htaccess и кладем в корень (перед k3) |
Sham спасибо! и спасибо не за скрипт более, а более за
Цитата:
это самое приятное и дорогое что можно редко встретить в мире П.С. хороших людей больше, они просто встречаеются реже |
301 («Moved Permanently»)
как прописать это в настройках площадки... я немного поменял структуру сайта и хочу чтобы со старых страниц шел автоматический редирект на новые. как это следать? |
в итоге решение взято здесь:
http://www.webconfs.com/how-to-redirect-a-webpage.php но пришлось слегка модифицировать, вот что получилось: Options +FollowSymLinks RewriteEngine on RewriteRule ^zimbabve/(.*)$ http://www.geo-world.ru/africa/zimbabve/$1 [R=301] и да простить меня хостер за .htaccess размером в 93kb |
Vlad Drakula можно еще так:
RewriteRule ^(zimbabve|qw|ee|rrr|ttt)/(.*)$ http://www.geo-world.ru/$2/$1 [R=301] если правильно понял тебя про Цитата:
|
E-mail
ага... тогда один регексп будет в несколько десятков килобайт... |
Vlad Drakula
Цитата:
Цитата:
|
Sham
Цитата:
Цитата:
|
Vlad Drakula
Цитата:
Цитата:
|
Sham
иначе перекидывалось на другой домен... у охной площадки два домена... |
Sham вообще то опять не так объяснил((
директорию k9 удалили, создали директорию k3, но еще были директории k10 и k11 и теперь все это находится только в k3 загвоздка в том, что некоторые value у k10 такие же как и у k11 и k9 ( т.е. если раньеш была ссылка: http://site.ru/k9/send.php?value=5&page=1-9 она должна стать: http://site.ru/k3/send.php?value=97&page=1-9 а если ссылка: http://site.ru/k10/send.php?value=5&page=1-9 она должна стать: http://site.ru/k3/send.php?value=76&page=1-9 вот так вот( и что тут можно сделать?.. |
E-mail
Код:
## этот код до черты в .htaccess и кладем в корень (перед k3) |
Цитата:
а если я вдруг не помню какие именно цифры у папок совпадают, я конечно могу посмотреть, но тогда придется сравнить кучу файлов старых урлов, и скорее всего я так и поступлю(( , но можно както это автоматизировать?.... я например ума не приложу как.. кстати говоря, там помимом page и value есть еще параметр &lang=en или вообще lang может отсутствовать..... |
E-mail
Цитата:
Цитата:
Ты видимо приколоться надо мной решил... :haha: каждый раз что-то новое мне сообщаешь... а если я тебе решение предложу, где гарантия, что ты еще что-нить не забыл? С какой стороны (в каком месте) QUERY_STRING может быть &lang=en? Есть ли какая-нить логика в цифрах, которые у тебя меняются (может формула какая)? Что ты именно хочешь автоматизировать? Если логики нет, то без кучи-малы никак не обойтись... Ты сначала посчитай, сколько всего значений value у тебя меняется, столько и будет наборов правил, и с каждым значением тебе придется работать отдельно (где каталоги разные, или еще че-нить). И что, в каждой папке send.php был? Извини, моя фамилия не Холмс... |
Sham нет я не прикалываюсь, просто обнаружилось еще несколько папок)..
Цитата:
|
E-mail, ну я обновил свой пост с кодом... там подстановка %2 содержит все, что справа строки GET... да и с комментами я че-то начудил... :fool:, в общем разберешься... если чего не так, скажи...
|
Цитата:
- две решотки в одной строчки для парсера конфига опасно серверу) - зачем разбивать на два файла - для корня и рабочей директории? - вот этот код вообще мне кажется излишен: Код:
RewriteEngine On Код:
RewriteCond %{QUERY_STRING} value\=5\&page\=([0-9\-\_]*)((\&.+)*)$ - и еще, лишняя проверка на директорию: Код:
RewriteCond %{THE_REQUEST} \/k9\/ Я реализовал это вот в таком виде: Код:
RewriteEngine On с огромным уважением! |
E-mail
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Все-таки думаю, ты не до конца разобрался в моем коде... у меня гораздо компактнее и рациональнее. Но как говорится - хозяин-барин... |
Господа а Apache 1.3.7 не поддерживает комбинаций типа \w{2}? В смысле нормальных регулярных выражений?
|
benya, Только POSIX-регулярки...
|
а как сделать редирект
с site.ru/index.html на site.ru с site.ru/index.htmlfmfmfkrk на site.ru и с site.ru/все_что_угодно.htmldfklj на site.ru/все_что_угодно.html и с site.ru/все_что_угодно.htmdfklj на site.ru/все_что_угодно.htm и желательно по компактней?:) поможите.. |
E-mail
Код:
RewriteEngine On |
Sham что прости заменить?:)
эм, а с директориями третьего и т.д. уровня такжеработает? site.ru/ttt/index.html на site.ru/ttt/ ?:) и еще как быть с htm и как учесть чтобы запросы ? и # не терялись?:)... |
E-mail обновил, должно работать.
Цитата:
Цитата:
|
Sham запрос редиректил на документ рут)
другой вопрос как сделать редирект чтобы с запросов вида: site.ru/go/home редиректило на site.ru/go/hotmepage.html и с site.ru/go/home/ редиректило на site.ru/go/hotmepage.html ?:) при этом индекс по умолчанию index.php |
E-mail где ты их берешь то? :)
Код:
## .htaccess в каталоге /go |
Sham RewriteRule ^(.*)index\.html?(fmfmfkrk)?$ http://site.ru/$1
а как понимать конструкцию: ?()? RewriteOptions inherit это я так понимаю заставляет обрабатываться первым файл htaccess тот что в корне, а затем тот что в папке go? или я чтото не понимаю в этом мире?:) а зачем он нам? о_О Цитата:
|
E-mail RTFM
|
Sham не серьездный ответ для серьездного форума:)
|
Снова привет :) и снова вопросы, на этот раз их 2.
1. Как сделать чтобы при любых запросах типа www.сайт.ru, www.bla-bla-bla.сайт.ru, bla-bla-bla.сайт.ru, 123.qwerty.сайт.ru перенаправляло на http://сайт.ru? Так будет корректно? Код:
RewriteCond %{HTTP_HOST} ^(.*).сайт.ru$ [NC] Код:
RewriteCond %{QUERY_STRING} ^(.*)=http://(.*) [OR] Спасибо :) |
Siava one
1. а энти папки то есть или их нет, а ежели есть, то где? Никто же не знает (я в т.ч.), как у тебя субдомены прописаны... если нет, то редирект в конф. файле надо прописать..., а есть - в кажную папку - htaccess. Огласите весь спск пжалста :) 2. сверху свое правило пропиши (они сверху вниз выполняются)... |
Sham
1. Субдоменов нет, но наверно апач у меня сконфигурирован так, что с любым субдоменом заходит на один и тот же сайт. 2. Так какое своё правило? У меня его нет, вот и спрашиваю как оно должно выглядеть? :) P.S. С п.1 разобрался :) Код:
RewriteCond %{HTTP_HOST} ^(.*).siava.ru$ [NC] |
Siava one
1. дело хозяйское... но доп. инфа бы не помешала... Код:
RewriteCond %{THE_REQUEST} ^.+\.сайт\.ru.*$ [NC] Код:
RewriteCond %{QUERY_STRING} ^[^\=]+\=(https?|ftp).* [NC] |
Sham
Спасибо :) разобрался кажется, сначала не заработало, а потом нашёл ошибку свою :) P.S. Хотя.. при использовании остальных строчек это условие перестаёт работать. То есть допускает использование ?url=... с любыми другими файлами. Вот мои извращения: Код:
RewriteCond %{QUERY_STRING} ^[^\=]+\=(https?|ftp).* [NC] Файл, для которого разрешены запросы вида file.php?url=http://site.ru/.. находится в каталоге /forum/go/url.php Для всех остальных файлов такие запросы должны возвращать ошибку. |
Siava one
нифигасе списочек... :) только я не понял security settings относятся к url=...? вообще, тебе лучше все в виде одной регулярки оформить... большая получится, но будет производительнее намного... типа RewriteCond %{QUERY_STRING} (wget\%20|fetch\%20|echr|rush\=\%65\%63\%68|и т.д.) Разберешься короче :) Код:
RewriteCond %{QUERY_STRING} ^url\=.* [NC] |
Sham
Всё здовово! Разобрался, спасибо за помощь :) |
Sham а как можно с помощью rewrite поймать урл http://mysite.ru/. или http://mysite.ru/? и перенаправить на http://mysite.ru/404.html ??
а то при набирании этих урлов я попадаю на индексный файл, а надо на 404.html.. т.е. как отловить точку и знак вопроса? |
Код:
RewriteCond %{THE_REQUEST} [\?\.]$ |
Sham такой код не работает(
Код:
DirectoryIndex index.html отдается: PHP код:
отдается: PHP код:
|
E-mail
Цитата:
у меня там помарочка :) Правильно так: Код:
RewriteEngine On |
Sham
Цитата:
Код:
RewriteEngine On и еще, почему если изменить %{THE_REQUEST} на %{REQUEST_URI} работает по разному? |
а на конце знак вопроса, чтобы при запросе с вопросом, вопрос отрубало?)
а почему так, происходит?:) |
E-mail
Цитата:
Цитата:
Цитата:
Цитата:
|
Sham
Цитата:
а Цитата:
|
Добрый день, ночь, утро...
глубого извиняюсь если баяню, не хватило терпения все перечитать. Есть такая проблемма: PHP код:
При таком раскладе обрабатываются и запросы из тела страницы к директориям: http://site.com/i/ http://site.com/i/pageimg/ http://site.com/css/ http://site.com/js/ и естественно сробатывает подстановка описаная в примере, как можно исключить данные директории, чтобы они не обрабатывались... А то не прикольно получается... :sorry: |
censore, первой строкой поставьте условие
Код:
RewriteCond %{REQUEST_URI} !(i|css|js)\/ |
Спасибо!
|
Доброе всем время суток)
У меня такой вопрос - хочу все запросы типа - http://сайт/любой текст/ перенаправлять к примеру на http://сайт/index.php . Так что бы урл сохранялся , а выполнялся именно этот файл. И конечно если папка существует пере адресацию не делать. заранее спасибо) |
LineDir, но это будет замена 404...
Код:
RewriteCond %{REQUEST_FILENAME} !-f |
Sham,
Огромнейшие спасибо!! Очень помогло))) |
Есть url вида http://localhost/sse/index.php/news/news/26/ нужно получить следующее http://localhost/sse/index.php&url=/news/news/26/
Или что ещё лучше было бы сделать так что бы пути всех стилей, картинок, бакраундов и скриптов были не такие http://localhost/sse/index.php/news/...images/img.png , а такие http://localhost/sse/images/img.png. Попробовал написать в .htaccess следующие: Код:
RewriteEngine On |
Цитата:
2. htaccess дб в папке корень/sse Цитата:
|
Sham,
1.Параметры отделены / 2. .htaccess лежит в корень/sse/ Цитата:
|
|
301 редирект с php на ЧПУ ссылку
Здравствуйте!
Возможно, эта тема уже поднималась, но бьюсь над задачей 3й день, не могу ничего найти подходящего к моему случаю. Написал ЧПУ для сайта. Расставил на сайте ссылки вида Kategorija_1/page_1.html, в htaccess написал соот. правило Код:
RewriteRule ^Kategorija_1/page_1.html(.*)$ index.php?&pid=107983&$1 [NC] Код:
RewriteCond %{QUERY_STRING} ^(.+)pid=107983(.*)$ Подскажите, как быть в этой ситуации? Возможно ли решение данной задачи вообще? Заранее спасибо! |
вариантов можно кучу найти..
например, добавлять пустой параметр к урлу при срабатывании правила, а в случае редиректа проверять его отсутствие. Код:
RewriteCond %{QUERY_STRING} pid\=107983 1) правило последнее, и окончательный выход из всех правил; 2) только один цикл в самом правиле (а без флага L одно правило будет переписывать урл до тех пор, пока не будет совпадения). опыт показывает, что утверждение 2 вернее... |
Mod Rewrite внешний вид URL сокрытие структуры сайта
Всем привет!
Вопрос следующий. Проблема переадресации с помощью 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/ как лучше решить эту проблему в случае использования '/', можно использовать '#' но это не совсем то что надо. Может знает стандартное решение данного вопроса. Буду благодарен, подскажите. Благодарю за внимание!!! |
Цитата:
Код:
DirectoryIndex index.php Цитата:
Код:
RewriteRule ^page([0-9]+)$ index.php?page$1 [L] Цитата:
Код:
RewriteRule ^([^\/]+)/([^\/]+)/([^\/]+)/([^\/]+)$ index.php?$1=$2&$3=$4 [L] Цитата:
Цитата:
|
Привет всем. Пожалуйста помогите наладить перенаправление?
Перенесли сайт с тестового домена new.site.ru на основной домен _www.site.ru И нужно сделать так, чтобы при обращении к тестовому домену (допустим с поисковиков) срабатывало перенаправление на основной домен. К примеру, запрошена страница Цитата:
Цитата:
Цитата:
Ничего не происходит. Что не так? |
последняя строка
Код:
RewriteRule ^/?(.*)$ http://www.site.ru/$1 [R=301,L] Цитата:
в итоге (с соблюдением регистров) Код:
Options +FollowSymLinks |
Sham, спасибо огромное.
Тогда еще вопрос - а если страница на новом сайте не существует, то как перенаправить на главную? |
d0ublezer0, добавьте
Код:
ErrorDocument 404 http://www.site.ru |
Пожалуйста помогите с такой задачей:
посл перенастройки SEF модуля на сайте поменялись все ссылки. А по поисковым сисмемам народ приходит на "старые адреса". нужно поправить переход. Например придя по любой из ссылок: Код:
http://example.com/vmchk/musornyie-konteyneryi/ Код:
http://example.com/musornyie-konteyneryi.html Т.е. убрать из строки vmchk/ и заменить последний слеш на .html Спасибо. |
Код:
RewriteRule ^vmchk\/([^\/]+) http://example.com/$1.html [R,L] |
Sham, спасибо, только вот еще задача - некоторые ссылки уже имеют html в конце:
/vmchk/plastikovyie-bochki-i-bidonyi.html И получается что по вашему правилу для них формируется два расширения .html Как переделать? |
Код:
RewriteRule ^vmchk\/([^\/]+)(\.html)? http://example.com/$1.html [R,L] |
Sham, не помогает :(
Также и ставится два расширения. Вот весь мой htaccess Код:
## |
да, работает не так, как ожидалось (
тогда два варианта 1. если в именах в ссылках недопускаются точки, кроме расширений .html, то можно так Код:
RewriteRule ^vmchk\/([^\/\.]+) http://example.com/$1.html [R,L] Код:
RewriteRule ^vmchk\/([^\/]+\.html)$ http://example.com/$1 [R,L] |
Здравствуйте люди у меня такой вопрос. Есть такие правила.
Код:
RewriteRule /(.*)$ /index.php?lang=$1 |
ибо бесконечный цикл и мало конкретики в правилах...
+ передний слеш, если в конфиге сервера, а не htaccess, иначе уберите везде... Код:
RewriteRule ^/([^\/]*)$ /index.php?lang=$1 |
спасибо за столь быстрый отзыв. снял слеши, Intern. Server Error. поставил слеши обратно и сделал как сказано. вот полный код.
Код:
RewriteBase / |
уточните условия, непонятно, что требуется...
у вас на первое RewriteRule действуют 2 верхних условия RewriteCond (что не файл и не папка), а второе RewriteRule по-любому работает... |
вообщем у меня такая штука, есть index.php?page=Products&lang=rus и index.php?lang=rus . нужно чтоб они работали если в первом случае то site.com/products/rus, и site.com/rus соответственно. как именно сделать чтоб работало, ссылки на сайте изменены соответсвенным образом.
|
по идее достаточно этих строк (без всего остального)
Код:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond - это на случай если такой реальный путь существует (чтобы не было конфликтов)... |
а что index.php ??он у меня получает данные методом GET и все, но что-то не хочет работать чертов mod_rewrite.
у меня работает тока так. Код:
RewriteCond %{REQUEST_FILENAME} !-f |
у меня правило рабочее (проверено), только небольшие поправки (см. пост выше)...
|
может нужны какие то доп. настройк чтоб твой код работал у меня?? у меня апач 2.2.9
|
Цитата:
Цитата:
вот .htaccess Код:
Options +FollowSymLinks |
нет у меня типа этого. -
Код:
$page = $_GET['page']; |
Цитата:
если $_GET['page'] не существует, то будет e_notice. Нужно проверять наличие (empty/isset). хотя можно и заткнуть (@$_GET['page']) |
Здравствуйте. Уже третий день парюсь, ничего не могу поделать.
Делаю ЧПУ с помощью mod_rewrite. Мне нужно, чтобы ссылки site.ru/ru/page ссылались на index.php?lang=ru&page=page При отсутствии последней переменной пусть посылается только одна. .htaccess: Код:
DirectoryIndex /ru/ мы какбы находимся в папке ru/about. Со всеми вытекающими: не находит страницы и стили. Заранее благодарен) |
можно добавить проверку на наличие файла (или другие условия),
Код:
RewriteCond %{REQUEST_FILENAME} !-f Код:
RewriteRule ^(ru|en)/?$ index.php?lang=$1 [L] |
Ну это все варианты варианты, но меня мучает один вопрос.
Почему /ru/page1/ он пересылает в файл, но ../ для него становится этими папками? |
у меня вообще не работает код sham-а, только работает указанный мною, все эты скобки, квадратные круглые все это не работает. мне нужно чтоб нормально работали эти два правила вместе... но никак .... одно правило со всем справляется тока когда меняешь язык и остается одна переменная GET выдает что не найденна такая папка на сервере... посоветуйте что нибудь все перепробовал.
|
Цитата:
Цитата:
Если код не работает у вас, это не значит, что он неправильный. |
нужно уточнить насчет последнего слеша, т.к. правило не предусматривает его наличие, поэтому если в конце адреса будет слеш, правило не сработает... (нужно добавить туда /?)
|
Такс. Первая проблема решена, спасибо)
Теперь еще мелочь: htaccess тот же Код:
RewriteEngine On site.ru/ru/page также, как и site.ru/ru/page/ а вот site.ru/ru отправляет, но в строке тут же меняет на "http://siberiaczar/ru/?lang=ru" С чем бы это могло быть связано? И еще, как сделать что о вроде редиректа, чтоб /ru/page автоматически менялось на /ru/page/ |
Sham я не сказал что код нерабочий, смотри выше. я сказал что он у меня не работает и спросил о доп настройках которые могут помешать нормальной работе mod_rewrite- а, пожалуйста напишите что конкретно должно быть у меня в настройках апач, у меня стоит Lenny.
|
Цитата:
Код:
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ http://%{HTTP_HOST}/$1/$2/ [L] Цитата:
вообще, если например стоит nginx, то там мб свои правила прописаны, и апач тогда уже принимает измененный вариант. Т.ч. нужно смотреть комплексно, исходя из общей конфигурации... Цитата:
|
Цитата:
|
оно перед всеми правилами должно стоять (внешний редирект)
|
Цитата:
Можно чуть подробнее? |
Цитата:
|
ну хорошо. но ведь
Код:
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ http://%{HTTP_HOST}/$1/$2/ [L] я мог бы сделать Код:
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)/?$ index.php?lang=$1&page=$2 Мне нужна именно видимая подмена |
http:// - внешний редирект (по сути флаг R), т.е. браузеру шлется Location и обработка кончается - это и есть видимая подмена.
|
Странно, у меня не подменяет, хотя без этого правила ru/page не находит(значит, правило действует как надо, но без подмены).
Проверяю в индексе явой(document.location.pathname) - так и присылает - без слеша Где копать? |
как только открываю сайт в логах следующее
Код:
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98e3508/initial] (1) [perdir /var/www/] pass through /var/www/ceramica/ |
имхо RewriteBase у вас не '/', из-за этого проблемы.
Т.е. если htaccess лежит в корне, то попробуйте убрать RewriteBase. Правило мое возьмите (там проверка на наличие файла), а то у вас Цитата:
Цитата:
|
у меня "RewriteBase /", .htaccess лежит в /var/www a сам сайт в /var/www/ceramica. снял RewriteBase / - вообще стал не работать. .поставил настройки все как sham сказал, теперь сразу редиректит на 2 страницу и ненормально работает, то есть ссылки и тд не работают. вот логи.
Код:
10.10.0.188 - - [01/Apr/2010:18:11:51 +0500] [192.168.55.230/sid#9747bd8][rid#98ec528/initial] (2) [perdir /var/www/] rewrite 'ceramica/' -> 'index.php?page=ceramica&lang=' |
имхо у вас дб
Код:
RewriteBase /ceramica либо положите htaccess в ceramica Цитата:
|
спасибо, стало работать, но не все, в ие-6,7, опера10, хроме - ок, а в мозилле че то не выводит флеши некоторые.
извините а что означает следующий лог? Код:
192.168.155.32 - - [02/Apr/2010:14:55:45 +0500] [192.168.55.230/sid#8634bd8][rid#87d0508/initial] (2) [perdir /var/www/ceramica/] rewrite 'partners/rus' -> 'index.php?page=partners&lang=rus' |
Доброго дня! Помогите пожалуйста с проблемой.
на сайте есть URL типа: /image/small/ki436j9j.jpg Его нужно преобразовать к урлу: cache/image/small/{Первые два символа$1}/$1.jpg А если такого файла нет то перенаправить на скрипт image.php Пытаюсь сделать так: RewriteRule ^image/small/([a-z0-9_]+).jpg(/?)+$ cache/image/small/{Здесь споткнулся((((}/$1.jpg [L] RewriteRule ^image/(small|big|original|pda)/([a-z0-9_]+).(jpg|png|gif)(/?)+$ images.php?size=$1&name=$2&ext=$3 [L] Может быть сможете помочь? |
Код:
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)/$ index.php?lang=$1&page=$2 [L] Разве этот запрос удовлетворяет первому правилу? Код:
127.0.0.1 - - [04/Apr/2010:12:19:45 +0700] [site/sid#87a6a8][rid#8d0d30/initial] (3) [perdir C:/Sites/home/site/www/] applying pattern '^([A-Za-z]+)/([A-Za-z]+)/$' to uri '' Заранее благодарен за помощь) |
|
Цитата:
RewriteRule ^image/small/([a-z0-9_]{2})([a-z0-9_]+)\.jpg(/?)+$ cache/image/small/$1/$1$2.jpg аостался второй вопрос если этого файла нет то должно выполняться перенаправление следующим образом RewriteRule ^image/(small|big|original|pda)/([a-z0-9_]+).(jpg|png|gif)(/?)+$ images.php?size=$1&name=$2&ext=$3 [L] |
Цитата:
Код:
RewriteCond %{REQUEST_FILENAME} !-f |
Цитата:
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^image/small/([a-z0-9_]{2})([a-z0-9_]+)\.jpg(/?)+$ cache/image/small/$1/$1$2.jpg [L] RewriteRule ^image/(small|big|original|pda)/([a-z0-9_]+).(jpg|png|gif)(/?)+$ images.php?size=$1&name=$2&ext=$3 [L] ни так: RewriteRule ^image/small/([a-z0-9_]{2})([a-z0-9_]+)\.jpg(/?)+$ cache/image/small/$1/$1$2.jpg [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^image/(small|big|original|pda)/([a-z0-9_]+).(jpg|png|gif)(/?)+$ images.php?size=$1&name=$2&ext=$3 [L] Без [L] тоже пробовал((( |
|
Sham! Вы уж простите клинического идиота, но никак не могу заставить работать.... или если файла нет выкидывает 404 или всегда отрабатывает скрипт....
|
kamaikin, у вас два правила фактически одинаковые (могут совпадать на один урл), поэтому путаница. имхо можно местами поменять (правило с RewriteCond на первое место), либо поискать другое решение, более ясное. тут вам никто не помощник, ибо все нюансы известны только вам...
|
Цитата:
Почему при ссылке href="/ru/page2", он отправляет запрос верно, но в строке адреса ничего не меняется? |
|
Пожалуйста, подскажите такую вещь:
Нужно все урлы вида /asdfasfd.html Преобразовывать в /asdfasfd.html?parameter=znach Вставил в конфиг апача: RewriteRule (.*)\.html$ $1.html?parameter=znach [R] Браузер выдает: Ошибка 310 (net::ERR_TOO_MANY_REDIRECTS): Обнаружено слишком много переадресаций. Если в конфиге апача пишу: RewriteRule (.*)\.html$ $1.html?parameter=znach [L] Тогда не работает перенаправление. Помогите пожалуйста понять как сделать правильно. |
циклит, потому что шаблон слишком общий и нет флага L (R - для внешнего редиректа), нужно условие или более конкретный шаблон.
Код:
RewriteCond %{QUERY_STRING} !parameter\=znach |
Цитата:
Я ещё тупанул ... это не единственное правило ... поставил его в самый верх... и заработало. |
В каком то из скриптов Wordpress, взял пример .htaccess для того что бы любой адрес, который обращается к веб-серверу обращался к файлу index.php
Код:
<IfModule mod_rewrite.c> Код:
RewriteRule captcha.jpg /modules/captcha.php Все равно все ссылается на index.php Если вставить просто код: Код:
DirectoryIndex index.php |
Цитата:
Код:
RewriteCond %{REQUEST_URI} !captcha\.jpg или сделайте файл captcha.jpg и положите куда надо (проверка идет на отсутствие файла и папки). |
Здравствуйте.
Есть сайт. Он доступен по двум адресам: один адрес - домен сайта , второй адрес - сервисный адрес сайта. Мне нужно чтобы при переходе на домен сайта, он его перенаправлял на сервисный адрес сайта, причем так чтобы, все что после домена сайта, переносилось на сервисный адрес сайта, например: Код:
www.site.com redirect --> www.service_address.com Код:
Options +FollowSymLinks Большое спасибо.. |
нужно условие добавить
Код:
RewriteCond %{HTTP_HOST} ^(www\.)?site\.com$ Код:
RewriteCond %{HTTP_HOST} ^(www\.)?site\.com$ |
Sham, большое спасибо!!
кстати, маленький вопрос, уже давно хотел знать на него ответ. Обязательно ли перед точками ставить слеш Цитата:
Часто в статьях или еще где-то перед точками стоит слеш, но когда я сам пишу правила, то их не ставлю, и вроде работает)) Только что удалил слеши из выше написанного примера, и тоже работает) P.S. если вместо www, может быть любое значение, то писать так: Код:
RewriteCond %{HTTP_HOST} ^(.\.)?site\.com$ Спасибо. |
Цитата:
Код:
RewriteCond %{HTTP_HOST} site\.com$ |
Sham, как всегда большое спасибо)
Код:
RewriteCond %{HTTP_HOST} site\.com$ Код:
RewriteCond %{HTTP_HOST} .site\.com$ |
вопрос в содержимом %{HTTP_HOST}, куда смотрит регексп. Точка там ничего не решает, слева нет якоря на начало ^.
|
Подскажите знающие, всю голову уже сломал...
Как сделать редирект с домена в РФ Нужно, чтобы домен.рф domain.ru перенаправлялись на: domain.ru/doc/ плюс желательно "doc" скрыть. |
не забудьте, что кириллические домены шлются в punycode (ссылка на конвертер внизу есть).
|
Подскажите пожалуйста.
Имею два вопроса. В данный момент в .htaccess прописано: Код:
2. Хочу чтобы для *.html, *.htm файлов выше описанное тоже распространялось. Подскажите пожалуйста код. Заблаговременно спасибо. |
Цитата:
Код:
RewriteCond %{REQUEST_FILENAME}.php -f Цитата:
|
Sham
Спасибо. По поводу второго видимо это не представляется возможным. Я предполагал что реврайт может вырезать расширения при переходе с одной ссылки на другую. |
Через внешний редирект, поэтому как можно выше.
Код:
RewriteCond %{THE_REQUEST} \.(?:php|html?)[\?\ ] |
Sham
Большое спасибо! Это работает и выглядит хорошо. Процитирую то, что мне ответили по этому коду на другом ресурсе: Цитата:
|
Цитата:
Код:
RewriteCond %{REQUEST_METHOD} =GET Цитировать никого не надо, в крайнем случае мануал. Точность ответа зависит только от конкретности заданного вопроса. |
Скажите пожалуйста, является ли такой редирект на https нормальным или есть более лучший способ?
Код:
RewriteEngine On |
Подмаски и жадные квантификаторы тут не нужны, и текст в условии можно просто сравнить. И флаги не помешают.
Оптимизируем. Код:
RewriteCond %{HTTPS} =off |
Как всегда благодарю, Sham
|
Как сделать чтобы при таком коде
Код:
RewriteRule ^PRIMER$ browse.php [L] Подскажите пожалуйста код для конкретного примера и глобальный, чтобы распространялся на всё на сервере. |
Время: 20:15. |
Время: 20:15.
© OSzone.net 2001-