13

I'm working on a pretty complex project, so I'd like to go with a file/folder structure that makes sense.

The folder/file structure I'd like to have is:

.htaccess
/php/
/assets/

I'd like to have the web pages that people will access in:

/php/views/pages/

I'm wondering if it's possible to use just .htaccess to set /php/views/pages as the "viewable root", so that for example, when people visit http://mydomain.com/ they'll be viewing http://mydomain.com/php/views/pages/index.php, and if so, how would I go about doing it?

Also, is it possible to canonicalize all access to /php/views/pages using .htaccess and a 301 redirect to stop multiple links being indexed in search engines?

cHao
  • 84,970
  • 20
  • 145
  • 172
Avicinnian
  • 1,822
  • 5
  • 37
  • 55

1 Answers1

30

If you don't have access to your host configuration

DocumentRoot can only be used in server and virtual host configs, .htaccess it must be.

  1. Let's add directives in your .htaccess

    RewriteEngine on
    
  2. I assume you want to let the requests to /assets go through

    #if a match for asset is found, do nothing
    RewriteRule ^assets/ - [L]
    
  3. If a request tries to access /php/views/pages/ directly, redirect it to its canonical version

    RewriteCond %{THE_REQUEST} php/views/pages/
    RewriteRule ^php/views/pages/(.*) http://mydomain.com/$1 [R=301,L]
    
  4. And add a rule to map everything else to /php/views/pages/

    RewriteCond %{REQUEST_URI} !php/views/pages/
    RewriteRule ^(.*)$ /php/views/pages/$1 [L]
    

If you have access to your host configuration

Forget about .htaccess files and use it. A sample configuration could look like

# ~base stands for your original DocumentRoot
<VirtualHost *:80>
    DocumentRoot ~base/php/views/pages
    Alias /assets ~base/assets

    # other configuration parameters
</VirtualHost>
nikoshr
  • 32,926
  • 33
  • 91
  • 105
  • 1
    Brilliant. There's a time cap on the bounty, so I'll award it to you when it finishes :). Thanks a lot for the very explanatory answer. – Avicinnian May 03 '12 at 11:38