[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: .htaccess RewriteRule
Xakep
Всем привет!

Есть локальный проект лежит по адресу http://localhost/myproject
т.е. не в корне localhost, а во вложенной папке myproject.
В директории myproject лежит весь сайт и там имеется файл .htaccess с таким содержимым:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^~(media|image)(_[a-zA-Z0-9\-\_]+)?\/([a-zA-Z0-9\-\_\/]+)(\.(png|jpeg|jpg|gif))?$ gettheme.php?type=$1&name=$3$2.$5 [L,QSA]


В gettheme.php, для теста, напишем просто
file_put_contents('1.txt','dfsfsf'',FILE_APPEND);

Для того, что-бы могли отслеживать, приходит ли запрос к этому файлу или нет.

Ну и, например, есть файл index.html с таким содержимым:
<img src="~media/logo_white.png"/>


Если мы перейдем по адресу http://localhost/myproject/index.html, то будет запрос к файлу gettheme.php и увидим, что была сделана запись в 1.txt.
Тут все хорошо, работает.

Но, если мы сделаем тоже самое, но уже во вложенной директории, то уже не сработает.
Например в localhost/myproject создадим директорию test и в ней создадим файл index.html с аналогичным содержимым, как и у прошлого файла index.html.
После этого перейдем по ссылке http://localhost/myproject/temp/index.html, то уже не будет запроса к файлу gettheme.php. Я понял это по тому, что в файл 1.txt ничего не записалось.

Вопрос почему? Почему он работает только из корня сайта (там где лежит .htaccess)? Подскажите как правильно это сделать, что-бы работало из любого места на сайте. Спасибо.
miketomlin
Маска в правиле отсчитывается от того каталога, в котором находится .htaccess, а адрес второй картинки относительно этого каталога уже будет temp/~media/logo_white.png wink.gif

Используйте абс. адресацию и лучше забудьте про размещение нескольких проектов в рамках одного хоста, тем более такое топорное.
Xakep
Цитата
Используйте абс. адресацию и лучше забудьте про размещение нескольких проектов в рамках одного хоста

По умолчанию в linux (по крайней мере в fedora) все проекты лежат в localhost

Цитата
адрес второй картинки относительно этого каталога уже будет temp/~media/logo_white.png

Наверное вы меня не правильно поняли. logo_white.png лежит не в папке temp, а в корне проекта в папке myproject.
И то, что вы написали, это также не работает.
miketomlin
По умолчанию никаких проектов нет. И для несуществующих проектов никто не будет создавать доп. вирт. хосты и расширять файл hosts их именами.


Это вы меня не поняли. На странице /myproject/temp/index.html при обращении по адресу ~media/logo_white.png вы обращаетесь к /myproject/temp/~media/logo_white.png, а этот адрес не подпадает под правило.

Используйте абс. адресацию: /myproject/~media/logo_white.png (префикс /myproject/ можно добавлять программно, если не можете от него отказаться, или использовать его в теге base).
Xakep
Ну хорошо, а можно сделать так, что-бы это правило RewriteRule ^~(media|image)(_[a-zA-Z0-9\-\_]+)?\/([a-zA-Z0-9\-\_\/]+)(\.(png|jpeg|jpg|gif))?$ gettheme.php?type=$1&name=$3$2.$5 [L,QSA] работало из любого места сайта и файл gettheme.php искало в корне сайта?
killer8080
Xakep
неужели так сложно слеш добавить в начале урл blink.gif
miketomlin
Xakep, можно, но не нужно. Чую, будут неконтролируемые дубли. Вы и так трансляцией частей пути в GET-параметры породили дубли. Трудно было прописать подобный роут в рамках единой точки входа? Или вы ее не используете?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.