views:

711

answers:

2

Hello everyone/

I am wondering wether it's possible to use .htaccess to rewrite a folder name. What I mean is this.

Lets say I have a url like:

www.site.com/folder1/page.php

Now I want to rewrite the url to (for example)

www.site.com/apple/page.php

The folder1 is an existing folder on my webspace.

important: the "apple" is not a folder rather just a name!

Ok here is a step by step plan:

1 . user types www.site.com/folder1/login.php 2 . The url should rewrite and not redirect the url to www.site.com/apple/login.php

This means that apple is just a name and not a directory. All the code should just come from folder1. Acutally apple should just be an alias for folder1. I can't just rename folder1 to Apple. Therefor I would just rewrite folder1 to apple.

+4  A: 

mod_rewrite can only rewrite/redirect requested URIs. So you would need to request /apple/… to get it rewritten to a corresponding /folder1/….

Try this:

RewriteEngine on
RewriteRule ^apple/(.*) folder1/$1

This rule will rewrite every request that starts with the URI path /apple/… internally to /folder1/….


Edit    As you are actually looking for the other way round:

RewriteCond %{THE_REQUEST} ^GET\ /folder1/
RewriteRule ^folder1/(.*) /apple/$1 [L,R=301]

This rule is designed to work together with the other rule above. Requests of /folder1/… will be redirected externally to /apple/… and requests of /apple/… will then be rewritten internally back to /folder1/….

Gumbo
Ah, Gumbo I think you're right. I misunderstood what the original poster meant, it's described backwards. +1
zombat
@zombat: Like always ;)
Gumbo
I tried this with http://site.com/folder1/login.php but it doesnt rewrite to http://site.com/apple/login.php
sanders
@sanders: As I already said, you have to request `/apple/login.php` to have it rewritten to `/folder1/login.php`.
Gumbo
@Gumbo: I want to rewrite folder1/login.php to apple/login.php and tried therefore RewriteRule ^folder1/(.*) apple/$1 but doesn't work. I even tried it with the indows regex tester but the patterns don't mactch
sanders
With your edit it shows now www.site.com/apple/login.php but on the screen i see an error since it says that it can't find the requested page.
sanders
@sanders: Did you use both rules together?
Gumbo
Yes now I use both rules togetherIt doesn't work yet 100%because when I am on http://site.com/apple/login.phpand go to http://site.com/apple/index.php it sends me back to http://site.com/Folder1/index.php
sanders
+2  A: 

try:

RewriteRule ^/apple(.*)?$ /folder1$1 [NC]

Where the folder you want to appear in the url is in the first part of the statement - this is what it will match against and the second part 'rewrites' it to your existing folder. the [NC] flag means that it will ignore case differences eg Apple/ will still forward.

See here for a tutorial: http://www.sitepoint.com/article/guide-url-rewriting/

There is also a nice test utility for windows you can download from here: http://www.helicontech.com/download/rxtest.zip Just to note for the tester you need to leave out the domain name - so the test would be against /folder1/login.php

to redirect from /folder1 to /apple try this:

RewriteRule ^/folder1(.*)?$ /apple$1 [R]

to redirect and then rewrite just combine the above in the htaccess file:

RewriteRule ^/folder1(.*)?$ /apple$1 [R]
RewriteRule ^/apple(.*)?$ /folder1$1 [NC]
Josh
thanks for your help but when i test it on this:I tried this with site.com/folder1/login.php but it doesnt rewrite to site.com/apple/login.php I get patterns not mach
sanders
@Josh: your edit RewriteRule ^/folder1(.*)?$ /apple1$1 [R] doesn't work eiter.
sanders