Wook
Wook

Reputation: 11

URL-rewriting with index in a "public" folder

I’m a newcomer in the development world. I desperately try to get the good URL. I checked the site for similar problems but I can’t find exactly what I need. Or I do it badly.

Here is the situation: I set up a project for a site whose the index.php file is in a folder named Public.

To be clearer, here is the URL I have now to reach the homepage of the built site: http:// Domain Name.com/ Folder / Name of the site/public

My concern is about the folder Public: I don’t want it appears in the URL. Here is the URL I’d like to get: http:// Domain Name.com/ Folder / Name of the site

In fact, I’d like this URL permits to get the index file placed in the folder "Public".

I can’t access the Apache configurations (shared host) so I have a .htaccess I placed in the project (i.e: www/ Folder /Name of the site /.htaccess). Here is its content:

Options -Indexes +FollowSymLinks +Multiviews
RewriteEngine On
RewriteBase /public/
RewriteRule ^(.*)$ index.html [NC,L]

I made something very simple for now because I tried lots of things without efficient result.

Upvotes: 1

Views: 1113

Answers (1)

Jon Lin
Jon Lin

Reputation: 143876

Not really sure what you are trying to do, but if you want to remove the /public/ path that appears in the URL, you need to remove it from all your links, second, turn off multiviews, it's not what you want, third, you need a rule to externally redirect the browser when a request is made for /public/, then you need to internally rewrite requests to point to public.

Options -Indexes +FollowSymLinks -Multiviews
RewriteEngine On

# externally redirect, must match against %{THE_REQUEST}
RewriteCond %{THE_REQUEST} ^(GET|HEAD|POST)\ /public/
RewriteRule ^/?public/(.*)$ /$1 [L,R=301]

# internally rewrite it back, but we must first check that it's pointing to a valid resource:
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d [OR]
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -s
RewriteRule ^(.*)$ /public/$1 [L]

Upvotes: 1

Related Questions