Перейти к публикации

htaccess RewriteRule, помогите пожалуйста


Рекомендованные сообщения

Сайт: www.zeos.com.ua

В папке "uploads" создал папку "another" и в ней создал папку "calculator"; и в этой папке создал файл index.php, получается что-то такое: www.domen.com/uploads/another/calculator/index.php

Но мне надо обращаться к этому файлу не напрямую, а так: www.domen.com/calculator; для этого прописал в .htaccess, ниже всего, что в нём уже написано, такой код:

# Вывод сервисов

RewriteRule ^calculator(/?)+$ uploads/another/calculator/ [L]
Но при обращении: www.domen.com/calculator выводится такое: "Внимание, обнаружена ошибка. По данному критерию новости не найдены, либо у вас нет доступа для просмотра этих новостей" Я так понял, что может не работает из-за того, что папка uploads защищена, тогда я сделал так: в корне создал папку "another" и в этой папке создал папку "calculator" с файлом index.php и прописал в файл .htaccess такой код:
# Вывод сервисов

RewriteRule ^calculator(/?)+$ another/calculator/ [L]

Но при обращении к www.domen.com/calculator снова выводит ту же ошибку, что и в предыдущем варианте.

Подскажите, что я сделал неправильно?!

Заранее спасибо за ответ  :rolleyes:

Мне кажется, что проблема в том, что я вставляю код ниже всего, что уже написано в .htaccess. Если это так, то подскажите, где правильно будет вставить?

Изменено пользователем www.zeos.com.ua
Ссылка на сообщение
Поделиться на других сайтах

celsoft, спасибо но ксожалению это не то!

Я хочу положить нужные мне папки по адресу:

www.domen.com/uploads/another/calculator/index.php

www.domen.com/uploads/another/Еще что-то/index.php

www.domen.com/uploads/another/И еще что-то/index.php

И чтобы обращаться к этим файлам по адресу:

www.domen.com/calculator

www.domen.com/Еще что-то

www.domen.com/И еще что-то

Для этого и надо прописать в .htaccess вот такое: RewriteRule ^calculator(/?)+$ another/calculator/ [L] , но куда именно? В самый верх, в самый низ или где то по центру или после какой-то строки?

Помогите кто знает!

********************************************************************************

Методом "проб и ошибок" узнал, такое:

В файле .htaccess внизу есть такие строчки:

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^.]+)/page/([0-9]+)(/?)+$ index.php?do=cat&category=$1&cstart=$2 [L]

RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^<]+)/rss.xml$ engine/rss.php?do=cat&category=$1 [L]

RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1 [L]

RewriteRule ^print:([^/]+).html$ engine/print.php?do=static&page=$1 [L]

RewriteRule ^([^/]+).html$ index.php?do=static&page=$1 [L]

И если прописать мой код: RewriteRule ^calculator(/?)+$ uploads/another/calculator/ [L] после строки: RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]

Вот так вот:

RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]

RewriteRule ^calculator(/?)+$ uploads/another/calculator/ [L]
То работать мой код не будет А если прописать мой код: RewriteRule ^calculator(/?)+$ uploads/another/calculator/ [L] до строки: RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L] Вот так вот:
RewriteRule ^calculator(/?)+$ uploads/another/calculator/ [L]

RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]

То работать будет

Вопрос: Что такого в этой сроке прописано: RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L] ???

Почему только до неё, а после неё уже не работает?

И конечно же в каждую папку, например, как я создал: calculator надо создать свой .htaccess и прописать: RewriteEngine Off

Кстати если прописать вместо RewriteEngine Off такое: RewriteEngine On то точно также работает 100%

Заранее спасибо! :mellow:

Изменено пользователем www.zeos.com.ua
Ссылка на сообщение
Поделиться на других сайтах

для этого прописал в .htaccess, ниже всего, что в нём уже написано
ошибка в этом)

может не работает из-за того, что папка uploads защищена
как это понимать?

Вопрос: Что такого в этой сроке прописано: RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L] ???

Почему только до неё, а после неё уже не работает?

ну если буквально, то любая папка не существующая в реальности будет вести на index.php?do=cat&category=папка

И конечно же в каждую папку, например, как я создал: calculator надо создать свой .htaccess и прописать: RewriteEngine Off
зачем?)
Ссылка на сообщение
Поделиться на других сайтах

для этого прописал в .htaccess, ниже всего, что в нём уже написано
ошибка в этом)

>> А куда же тогда надо было вставлять?

Вопрос: Что такого в этой сроке прописано: RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L] ???

Почему только до неё, а после неё уже не работает?

ну если буквально, то любая папка не существующая в реальности будет вести на index.php?do=cat&category=папка

>> То-есть мой код надо выводить до неё я так понял?

И конечно же в каждую папку, например, как я создал: calculator надо создать свой .htaccess и прописать: RewriteEngine Off
зачем?)

>> Потому что без RewriteEngine Off или без RewriteEngine On не работает, можете проверить у себя :-)

У меня тогда еще два вопроса:

Вопрос первый: Если я хочу положить файл в корень, где лежит DLE, то как мне к нему обращаться, чтобы не выводило ошибку? Пример: www.site.ru/123.html

Вопрос второй: Я создал папку calculator по такому пути: www.site.ru/uploads/another/calculator и создал файл в этой папке: index.php.

А также прописал в .htaccess такое: RewriteRule ^calculator(/?)([^/]*)(/?)+$ uploads/another/calculator/$1 [L]

Проблема вот в чём:

В файле index.php я прописал относительную ссылку (<a href="2.php">2.php</a>). И если обратиться к этой папке так: www.site.ru/calculator/, то всё работает отлично и при нажатии на мою относительную ссылку попадаешь сюда: www.site.ru/calculator/2.php

Но если зайти на сайт так: www.site.ru/calculator (без косой линии) или так: www.site.ru/calculator// (две и более косых линии),

то моя относительная ссылка в первом случае ведёт на страницу: www.site.ru/2.php, а во втором случае на страницу: www.site.ru/calculator//2.php

Вопрос: как можно сделать так, что если человек вводит адрес: www.site.ru/calculator (без слеша), то слешь добавляется автоматически или какой-то редирект на правильный адрес: www.site.ru/calculator/. А при заходе на сайт так: www.site.ru/calculator// (два и более слеша), чтобы удаляло лишние слеши или делало редирект на правильный адрес: www.site.ru/calculator/

Очень прошу помочь, подсказать.

Заранее спасибо!!!!!

Изменено пользователем www.zeos.com.ua
Ссылка на сообщение
Поделиться на других сайтах

>> А куда же тогда надо было вставлять?
>> То-есть мой код надо выводить до неё я так понял?
как раз до неё, как вы и сделали

Потому что без RewriteEngine Off или без RewriteEngine On не работает, можете проверить у себя :-)
не проверял бы - не писал

А вообще откровенно говоря я против "тысяч" правил в .htaccess - по мне так достаточно такой конструкции

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule !\.(pdf|php|js|ico|txt|gif|jpg|png|css|rss|zip|tar|gz)$ index.php

список расширений - по вкусу)

и в самом скрипте уже определять что хочет пользователь..

Вопрос первый: Если я хочу положить файл в корень, где лежит DLE, то как мне к нему обращаться, чтобы не выводило ошибку? Пример: www.site.ru/123.html
а какая у вас ошибка вылазиет?

Вопрос: как можно сделать так, что если человек вводит адрес: www.site.ru/calculator (без слеша), то слешь добавляется автоматически или какой-то редирект на правильный адрес: www.site.ru/calculator/. А при заходе на сайт так: www.site.ru/calculator// (два и более слеша), чтобы удаляло лишние слеши или делало редирект на правильный адрес: www.site.ru/calculator/
зачем вам редиректы? Просто не используйте относительные ссылки - вот и всё Изменено пользователем Александр Медведев
Ссылка на сообщение
Поделиться на других сайтах

Потому что без RewriteEngine Off или без RewriteEngine On не работает, можете проверить у себя :-)
не проверял бы - не писал

>> Не знаю, но у меня работает именно с RewriteEngine Off или с RewriteEngine On и так у большинства, если создать папку www.site.ru/forum/ и обращаться к ней то будет ошибка, а если в папке forum будет .htaccess с RewriteEngine Off или с RewriteEngine On то всё будет грузиться как надо!

Вопрос первый: Если я хочу положить файл в корень, где лежит DLE, то как мне к нему обращаться, чтобы не выводило ошибку? Пример: www.site.ru/123.html
а какая у вас ошибка вылазиет?

>> Такая же ошибка как и у всех: "Внимание, обнаружена ошибка. К сожалению, данная страница для Вас не доступна: возможно, был изменен ее адрес или она была удалена. Пожалуйста, воспользуйтесь поиском."

Вопрос: как можно сделать так, что если человек вводит адрес: www.site.ru/calculator (без слеша), то слешь добавляется автоматически или какой-то редирект на правильный адрес: www.site.ru/calculator/. А при заходе на сайт так: www.site.ru/calculator// (два и более слеша), чтобы удаляло лишние слеши или делало редирект на правильный адрес: www.site.ru/calculator/
зачем вам редиректы? Просто не используйте относительные ссылки - вот и всё

>> Затем, что я не хочу чтобы пользователь видел такие вот адреса длинючие: www.site.ru/uploads/another/calculator/2.php

Помогите решить мой вопрос кто знает! Заранее большущее спасибо!

Изменено пользователем www.zeos.com.ua
Ссылка на сообщение
Поделиться на других сайтах

Такая же ошибка как и у всех: "Внимание, обнаружена ошибка. К сожалению, данная страница для Вас не доступна: возможно, был изменен ее адрес или она была удалена. Пожалуйста, воспользуйтесь поиском."
попробуйте перед
RewriteRule ^([^/]+).html$ index.php?do=static&page=$1 [L]
написать
RewriteCond %{REQUEST_FILENAME} !-f

Затем, что я не хочу чтобы пользователь видел такие вот адреса длинючие: www.site.ru/uploads/another/calculator/2.php
пишите ссылки вида www.site.ru/calculator/2.php
Ссылка на сообщение
Поделиться на других сайтах

Александр Медведев, спасибо, прямые ссылки помогли решить проблему.

Был бы очень благодарен, если бы кто-то смог мне прокомментировать данный код побуквенно:

RewriteRule ^calculator(/?[^/]*)(/?)+$ uploads/another/calculator/$1 [L]

Попробую сам:

^ - начало регулярного выражения

calculator - название папки

(/?[^/]*) - Может стоять один "/", а может и не стоять, после сколько угоно любых символов кроме "/"

(/?)+ - В конце всего может стоять один "/", а может и не стоять. После один или несколько литералов.

$ - Конец регулярного выражения.

uploads/another/calculator/$1 - Реальный путь к файлу который надо грузить по получившемуся результату регулярного выражения.

$1 - Идентификатор куда вставлять запрос регулярного выражения.

[L] - Конец правила.

Вопрос можно ли написать код так:

Вместо:

RewriteRule ^calculator(/?[^/]*)(/?)+$ uploads/another/calculator/$1 [L] написать так:

RewriteRule ^calculator(/?[^/]*/?+)$ uploads/another/calculator/$1 [L]

Можно ли этот код написать как то правильнее и еще короче? Так как писал его почти наугад :-(

Заранее спасибо за ответ!

Изменено пользователем www.zeos.com.ua
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...