Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
670 views
in Technique[技术] by (71.8m points)

.htaccess - Use htaccess to mask folder name

Here's a problem I'm always wanting to solve with htaccess. I haven't found a way yet, though it looks like it should be possible - perhaps someone can help.

Let's say I have a folder at the root of my site called /foo/. I want users to be able to access that folder at the path /bar/, but for various reasons I can't rename the folder.

So as not to create confusion I only want one path to ever be seen - that is to say, I don't want people to use the name /foo/ to access the folder; they should always use /bar/. If someone goes to example.com/foo/, their browser should redirect to example.com/bar/ - but the content returned should be the content of /foo/.

To make matters more complicated, pages in /foo/ have dependencies (images, stylesheets, links to other pages, etc) within /foo/ which are hardcoded and can't be changed. These must, of course, still work.

So, to summarise, this is what I want :

  • Requests for example.com/foo/ should redirect to example.com/bar/.
  • Requests for example.com/bar/ should return the contents of example.com/foo/.

Is this possible? It looks on the surface as if it would create an infinite redirect... but I'm pretty sure there are ways to prevent that in htaccess, aren't there?

I'd be very grateful for any help.

(PS - for a little extra background: The normal reason I want to do this is to rename the wordpress /wp-admin/ directory to something more professional and easy for customers to remember, such as /admin/. But the same system should work for masking any path in this way.)

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I found a sort of workaround - by using a symlink and htaccess in combination.

First I created a symlink from /bar to /foo/.
Then I put this in htaccess :

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

This has exactly the desired result - example.com/bar/ shows the content of the /foo/ directory, and example.com/foo/ redirects to example.com/bar/

But if anyone can come up with a pure htaccess solution I'd much prefer that!


Update :

Ok, I've finally found out how to do this. It turns out to be quite simple...

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

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

The only problem is that it doesn't take account of RewriteBase, so you have to include the full path in the first line (after ^GET).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...