Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > mod_rewrite в поддиректории, слияние путей


Автор: Ams 20.8.2009, 02:38
Добрый день.

Столкнулся с такой проблемой при работе mod_rewrite.
Допустим, есть сайт, где основной обрабатывающий скрипт manager.pl находится в папке Project/. 
Пользователю отдаётся страница с меню, где ссылки вида http://localhost/Project/manager/view (manager это виртуальная папка, сгенерированная mod_rewrite). 
Из этого меню скрипт принимает запросы так:  manager.pl?type=view.
Также есть подменю, где есть ссылки вида http://localhost/Project/manager/view/table, здесь скрипту уже идёт запрос manager.pl?type=view&subtype=table.

Проблема такая - при переходе по любой из ссылок пути склеиваются, то есть получаются ссылки уже http://localhost/Project/manager/view/view.
Будь скрипт в корне, можно было бы избежать такой проблемы используя относительный путь, а так, данный путь - "manager/view" приклеивается и к меню, и к папкам с картинками, css и js -файлам.

Собственно, вот сам .htaccess:
Код

AddDefaultCharset UTF-8
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /Project/

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^config - [F]
RewriteRule ^ajax - [F]
RewriteRule ^files - [F]
RewriteRule ^templates - [F]
# Fix slashes
RewriteRule ^(.+[^/])$ $1/ [QSA]

RewriteRule ^manager/([A-Za-z]+)/([A-Za-z]+)/$ ./manager.pl?type=$1&subtype=$2 [L,NS]
RewriteRule ^manager/([A-Za-z]+)/$ ./manager.pl?type=$1 [L,NS]

# Switch SSL on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

В общем, вопрос таков - как избежать приклеивания "manager/view" к моим ссылкам? 
Просто не могу понять из каких условий mod_rewrite берёт manager и view. Мануалы читал, гуглом пользовался.  
 

Автор: Nigel 20.8.2009, 10:05
Когда набираете  http://localhost/Project/manager/view/table выполняется manager.pl?type=view&subtype=table?

Автор: Ams 20.8.2009, 14:37
Да, все параметры успешно передаются и открывается новая страница с меню и подменю, где к ссылкам приклеивается "manager/view".

Если поточней, то порядок действий такой:
1. Открываем страницу, есть меню, там ссылки https://localhost/Project/manager/view. В подменю ссылки https://localhost/Project/manager/view/table и т.д.
2. Переходим по любой ссылке в подменю, и теперь ссылки в меню https://localhost/Project/manager/view/view и подменю https://localhost/Project/manager/view/view/table.

В скрипте ссылки для меню выглядят как <a href="view">View</a>, для подменю <a href="view/table">Table view</a>.
А FireBug показывает, что для картинок, css/js - файлов, которые лежат в папке "templates/" запрос выглядит так: https://localhost/Project/manager/view/templates/js/main.js 

Автор: Ams 23.8.2009, 12:52
Неужто никто не знает в чём загвоздка? За три дня никто так и не сделал предположений.

Автор: Nigel 24.8.2009, 09:49
У вас проблема в скрипте, сами же пишете относительные ссылки <a href="view">view</a>, а потом удивляетесь почему "приклеиваются".
Используйте тэг <base> или пишите абсолютные пути.

Автор: Ams 25.8.2009, 00:43
Да, спасибо, про тег base  я и вовсе забыл. Проблема решена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)