Apache .htaccess относительный запрос перенаправления URI - PullRequest
1 голос
/ 23 февраля 2012

Прежде всего, у меня следующая структура каталогов:

  • / project_directory / rewriting_experimentation_directory
    • Файл htaccess
    • realfile.txt

Я пытаюсь сделать следующее:

Когда пользователь запрашивает http://domain.xts/.../rewriting_experimentation_directory/falsename, realfile.txt должен отображаться. Это я уже достиг, с помощью следующего выражения в файле .htaccess:

RewriteEngine On
RewriteRule   ^falsename$  realfile.txt

Однако я также пытаюсь добиться этого, когда пользователь запрашивает этот URL http://domain.xts/.../rewriting_experimentation_directory/realfile.txt, чтобы он был перенаправлен на http://domain.xts/.../rewriting_experimentation_directory/falsename, а затем, естественно, отображался контент для realfile.txt.

Однако я столкнулся с двумя проблемами:

  1. Во-первых, требуется Redirect 301, RedirectMatch, Alias ​​и т. Д. абсолютные пути, а не те, которые относятся к каталогу .htaccessfile находится в. Это совершенно недопустимо, так как Путь до каталога rewriting_experimentation_directory отличается от пути на локальном хосте, когда я загружаю его в domain.xts (или где-либо еще)
  2. Во-вторых, он не совпадает с запрошенным URL-адресом, но URL, который я и впредь буду называть URL-адресом " response ", а именно имя файла, содержимое которого Apache возвращается к клиенту. Таким образом, если я пытаюсь перенаправить из realfile.txt в Falsename, я получаю бесконечный цикл. (К сожалению, загрузка занимает немного времени).

Есть ли способ достичь этого?

Кроме того, в качестве ответа на вопрос: «Зачем вам это нужно?» - учиться, во-первых, и во-вторых, для дальнейшего использования (что еще может считаться обучением). Я надеюсь, что это не лишит законной силы мой вопрос.

1 Ответ

3 голосов
/ 23 февраля 2012

Попробуйте добавить это до вашего RewriteRule:

RewriteCond %{THE_REQUEST} ^([A-Z]{3,9})\ (.*)/realfile.txt\ HTTP
RewriteRule ^realfile.txt$ %2/falsename [R=301,L]

Есть несколько вещей, которые это делает, если вы просто перенаправите с помощью RewriteRule ( R в скобках), это вызовет цикл перезаписи, и вы получите ошибку. Вам нужно проверить, что фактический запрос предназначен для "realfile.txt" . Регулярное выражение (.*)/realfile.txt пытается извлечь относительный URI, именно там находится файл .htaccess (в противном случае эти условия / правила вообще не будут выполняться), и поскольку мы не знаем, что это такое, мы можем просто сослаться на него, используя % 2 в RewriteRule.

Таким образом, если вы поместите файл .htaccess в /test/ и запросите http://yourdomain/test/realfile.txt, вы будете перенаправлены на 301 к http://yourdomain/test/falsename, и ваше правило перезаписи будет служить realfile.txt. Если вы поместите файл .htaccess в /deploy/ и запросите http://yourdomain/deploy/realfile.txt, вы будете перенаправлены на 301 к http://yourdomain/deploy/falsename, и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...