Преобразование относительных запросов URL в абсолютный запрос URL с использованием mod_rewrite - PullRequest
0 голосов
/ 18 июля 2011

Я использовал простое правило перезаписи в моем файле .htaccess, чтобы сделать мой URL красивым.Когда-то это было так:

http://somedomain.com/product-details.php?product=MQ==&hash=123456789

Теперь это так:

http://somedomain.com/secure/123456789/MQ==/rings/details/blue-diamond-topaz-ring.php

Это все очень хорошо, но у меня есть много файлов PHP, в которых все ссылки JS и CSS относительно,Из-за вышеупомянутого нового симпатичного URL эти ссылки на JS и CSS теперь имеют 5 или 6 каталогов слишком глубоко.

Мой вопрос: С помощью mod_rewrite можно ли как-то сделатьзапрос на css/style.css или js/somescript.js переписать что-то вроде http://www/somedomain.com/css/style.css например?

Я уже погуглил свое сердце и сделал домашнюю работу, и хотя я могу найти миллион ссылок на переписывание URL, ни одногопохоже, работают одинаково для запроса таких сценариев.Я пробовал это, но безрезультатно:

RewriteRule ^/css/(.*)$ http://localhost/dev/css/$1 [R=302,L]

Я предполагал, что отправит ВСЕ запросы, например /css/somefile.css на http://localhost/dev/css/somefile.css

Любая помощь или руководство хорошо и действительно ценится.


ОБНОВЛЕНИЕ: Вот часть перезаписи моего файла .htaccess:

RewriteEngine on
Options +FollowSymLinks
RewriteBase /eterniti-mygate/
RewriteRule ^([^-]*)-article-([^-]*)\.php$ /in-the-news.php?action=$1&article=$2 [L]
#rings rewrite rule
RewriteRule ^secure/([^-]*)/([^-]*)/rings/details/([^_]*)\.php$ ring-details.php?product=$2&hash=$1 [L]
RewriteRule ^css/(.*)$ http://localhost/eterniti-mygate/css/$1 [R=302,L]

ОБНОВЛЕНИЕ: Вот вывод файла журнала для перезаписей

Пожалуйста, смотрите мой файл журнала на https://docs.google.com/leaf?id=0B-NRfZvE6xi7MmI0N2ZjNzEtYWZlYy00NjJiLWJhMjQtYzAyYzY4ZWIxN2U0&hl=en_GB

Похоже, что он не переписывает запрос из базы, а скорее из виртуального каталога (например, / secure / ring / details /).Я установил для rewriteBase / eterniti-mygate /, которая является папкой в ​​корневом каталоге вашего сервера wamp.

Ответы [ 2 ]

0 голосов
/ 18 июля 2011

Это должно быть полезно

RewriteCond %{REQUEST_FILENAME} \.css
RewriteRule ^css/(.*)$ http://localhost/dev/css/$1 [L]

Когда вызывается файл .css, вы перезаписываете (если файл находится в css /) в http://localhost/dev/css/<pathorname>.

Позаботьтесь о том, чтобы <pathorname> может включать подкаталоги.Также [R = 302] может просто не понадобиться.Внутреннего перенаправления должно быть достаточно.

Если это не сработает, вы можете увидеть, что происходит с:

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 2

(вы можете увеличить уровень журнала до 4, если вы все еще не можете понять.)

'Редактировать с подробностями журнала

Line 20 :  [perdir C:/wamp/www/eterniti-mygate/] add path info postfix: C:/wamp/www/eterniti-mygate/secure -> C:/wamp/www/eterniti-mygate/secure/af192eaa6808acab8947ce59a32f8d17/MQ==/rings/details/css/reset.css
Line 21 :  [perdir C:/wamp/www/eterniti-mygate/] strip per-dir prefix: C:/wamp/www/eterniti-mygate/secure/af192eaa6808acab8947ce59a32f8d17/MQ==/rings/details/css/reset.css -> secure/af192eaa6808acab8947ce59a32f8d17/MQ==/rings/details/css/reset.css

Мы пытаемся обслуживать защищенные / af192eaa6808acab8947ce59a32f8d17 / MQ == / rings / details / css / reset.css

'^([^-]*)-article-([^-]*)\.php$'
'^secure/([^-]*)/([^-]*)/rings/details/([^_]*)\.php$'
'^css/(.*)$' 

Не будет совпадать.Зная, что символ каретки (^) означает: начало строки / URL (http://mysite.com excluded), вы не можете обнаружить что-то, что не похоже на css/<something>END (FYI: $ означает конец строки / URL).Удалите его из вашего правила, и оно должно соответствовать <anything>css/<something>END, и правило будет применяться.

0 голосов
/ 18 июля 2011

При использовании rewriterule удалите переднюю (заднюю) косую черту, поэтому попробуйте это:

RewriteRule ^css/(.*)$ http://localhost/dev/css/$1 [R=302,L]
...