Используйте htaccess, чтобы замаскировать имя папки - PullRequest
1 голос
/ 21 октября 2010

Вот проблема, которую я всегда хочу решить с помощью htaccess.Я еще не нашел способ, хотя похоже, что это возможно - возможно, кто-то может помочь.

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

Чтобы не создавать путаницу, я хочу, чтобы только один путь был когда-либо замечен- то есть я не хочу, чтобы люди использовали имя /foo/ для доступа к папке;они всегда должны использовать /bar/.Если кто-то переходит на example.com/foo/, его браузер должен перенаправить на example.com/bar/ - но возвращаемое содержимое должно быть содержимым /foo/.

Чтобы усложнить задачу, страницы в /foo/ имеют зависимости (изображения, таблицы стилей, ссылки на другие страницы и т. д.) в /foo/, которые жестко запрограммированы и не могут быть изменены.Это, конечно, все еще должно работать.

Итак, подведем итог: вот что я хочу:

  • Запросы на example.com/foo/ следует перенаправить на example.com/bar/.
  • Запросы на example.com/bar/ должны возвращать содержимое example.com/foo/.

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

Я был бы очень благодарен за любыеhelp.

(PS - для небольшого дополнительного фона: нормальная причина, по которой я хочу это сделать, - переименовать каталог wordpress /wp-admin/ в нечто более профессиональное и удобное для запоминания, например, /admin/Но та же система должна работать для маскировки любого пути таким образом.)

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Я нашел своего рода обходной путь - используя символическую ссылку и htaccess в комбинации.

Сначала я создал символическую ссылку от /bar до /foo/.Затем я помещаю это в htaccess:

Options +FollowSymLinks
RewriteRule ^foo/(.*)$ bar/$1 [R,L]

Это дает точно желаемый результат - example.com/bar/ показывает содержимое каталога /foo/, а example.com/foo/ перенаправляет на example.com/bar/

Но если кто-то может предложить чистое решение htaccess, я бы предпочел это!


Обновление:

Хорошо, я наконец-то узналкак это сделатьОказывается, все довольно просто ...

RewriteCond %{THE_REQUEST} ^GET\ /foo/
RewriteRule ^foo/(.*)$ bar/$1 [R,L]

RewriteRule ^bar/(.*)$ foo/$1

Единственная проблема заключается в том, что он не учитывает RewriteBase, поэтому вы должны включить полный путь в первую строку (после ^GET\).

0 голосов
/ 21 октября 2010

Если я правильно понимаю, что вы хотите что-то вроде этого в вашем файле .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^foo/$ bar/
RewriteRule ^bar/$ foo/
</IfModule>
...