мод перезаписать соответствие файла в подкаталоге - PullRequest
1 голос
/ 29 ноября 2011

Редактировать: все получилось, вот окончательная версия

RewriteCond $1 ^(.*?)/(.*)$
RewriteCond apps/%1/content/%2 -F
RewriteRule (.*) apps/%1/content/%2 [QSA,last]

Редактировать: Оригинальный вопрос внизу

Я близок к работе, вот правило в моем mod_rewrite

RewriteCond $1 ^(.*?)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/johnsmith/apps/%1/content/%2 -f
RewriteRule (.*) apps/%1/content/%2 [QSA,last]

, которое будет правильно перенаправлять запрос на

http://host/johnsmith/blog/css/style.css

на

/docroot/johnsmith/apps/blog/content/css/style.css

но мне нужно жестко запрограммировать johnsmith в файл .htaccess под johnsmith.Можно ли использовать относительный путь, и если нет, есть ли переменные, доступные мне, чтобы я знал текущий каталог .htaccess?

Оригинальный вопрос ниже

Допустим, у меня есть веб-приложение Apache с docroot / docroot. У меня есть файл css, расположенный здесь:

/docroot/johnsmith/apps/blog/content/css/style.css

Я хочу получить этот файл с запросом

http://host/johnsmith/blog/css/style.css

Файл .htaccess должен находиться в папке johnsmith.Следующий набор правил приводит к бесконечному циклу перенаправления

RewriteCond ^(.*?)/(.*)$ apps/$1/content/$2 -f
RewriteRule ^(.*?)/(.*)$ apps/$1/content/$2 [QSA,last]

Если я немного изменил его, избавившись от условия, я могу перейти на страницу, которая представляет собой простой сценарий PHP, чтобы распечатать строку запроса, котораяпоказывает

RewriteRule ^(.*?)/(.*)$ showquerystring.php?path=apps/$1/content/$2 [QSA,last]

путь равен apps / blog / content / css / style.css, это именно то, что я ожидаю.

Может кто-нибудь сказать мне, что яотсутствует?

Кроме того, папка johnsmith может быть названа как угодно, и файл .htaccess внутри johnsmith не должен содержать жесткий код johnsmith.

Более кратко, я хочу спросить::

Есть ли переменная, доступная для mod_rewrite, которая будет равна /blog/css/style.css

Ответы [ 2 ]

0 голосов
/ 30 ноября 2011
RewriteCond $1 ^(.*?)/(.*)$
RewriteCond apps/%1/content/%2 -F
RewriteRule (.*) apps/%1/content/%2 [QSA,last]
0 голосов
/ 29 ноября 2011

Проблема в том, что /johnsmith/blog/css/style.css перенаправляет на /johnsmith/apps/blog/content/css/style.css, который перенаправляет на /johnsmith/apps/apps/content/blog/content/css/style.css и т. Д. И т. Д. Это связано с тем, что apache будет повторять процесс перезаписи с переписанным URL-адресом.Правило RewriteCond верное.

Так вот, как мне кажется, должно быть:

RewriteRule ^apps/ - [L]
RewriteCond %{DOCUMENT_ROOT}/apps/$1/content/$2 -f
RewriteRule ^(.*?)/(.*)$ apps/$1/content/$2 [QSA,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...