Модуль перезаписи для обработки папок с версиями сайта (разделительная черта) - PullRequest
5 голосов
/ 12 октября 2011

Я использую следующее правило для использования папок для разных версий:

RewriteEngine On
RewriteRule .* - [E=VERSION:020]
RewriteRule ^versions/(.*)$ versions/$1 [L]
RewriteRule ^(.*)$ versions/%{ENV:VERSION}/$1 [L]

У меня есть такая структура:

http://domain.com/versions/020/
http://domain.com/versions/020/th?=1
http://domain.com/versions/020/myfolder/
http://domain.com/versions/020/myfile.html

Но пользователь может видеть:

http://domain.com/
http://domain.com/th?=1
http://domain.com/myfolder/
http://domain.com/myfile.html

У меня есть последняя проблема с косой чертой, которая показывает номер версии.

Вторая точка входа (все еще работает):

http://domain.com/site/

Но проблема, когда пользователь вводит URL-адрес и опускает косую черту в конце, например:

http://domain.com/site

Пользователь теперь видит номер версии следующим образом:

http://domain.com/versions/020/site/

Это проблема, так как я не хочу, чтобы пользователь узнавал о других версиях.

Есть идеи, как решить проблему?

1 Ответ

1 голос
/ 22 октября 2011

Похоже, что это мешает mod_dir, который по умолчанию перенаправляет браузер, когда он пытается получить доступ к каталогу, а завершающий слеш отсутствует. Происходит перезапись, изменяющая /site на /versions/020/site, затем mod_dir перенаправляет браузер на http://domain.com/versions/020/site/. Таким образом, браузер видит содержимое версии / 020 в строке адреса.

Вы можете отключить автоматическое перенаправление mod_dir с помощью директивы «DirectorySlash Off» . Но вы можете добавить косую черту в любом случае, включив перенаправление до того, как произойдет перезапись.

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R,L]

Это или что-то эквивалентное до того, как вы выполните перезапись на /version/020, мы надеемся исправить это.

Редактировать: На самом деле, теперь, когда я думаю об этом, если вы переписываете / перенаправляете, когда завершающий слеш отсутствует, вам не нужно отключать DirectorySlash, потому что к тому времени у него всегда будет конечный слеш он попадает в mod_dir. Может быть, сделать это в любом случае, чтобы быть в безопасности?

...