Magento – Magento install in subfolder of ServerRoot: how to use server rewrites to get rid of subfolder in all URLs

urlurl-rewrite

I would like to summarize: I want to know if it is possible
to install Magento on Linux with the following configuration:

  1. I do not have root access and so cannot modify the DocumentRoot
    directive to point anywhere other than /home/jsonderson/public_html .

  2. Magento is installed not in the web domain server root directory,
    public_html, but in a child directory of public_html, say magento1.

  3. Magento has server rewrites turned on (no index.php in URLs)

  4. THIS IS THE IMPORTANT PART: Magento frontend is accessible
    not as http://myhost.com/ and not not as http://myhost.com/magento1/
    and backend is accessible as http://myhost.com/myadmin

NOTE: I couldn't specify http://myhost.com/ at install time for the base URL
even though I seemed to have a suitable .htaccess in public_html at the time,
so I had to enter http://myhost.com/magento1 for the URL at install time.
Later on when I went to the System -> Configuration -> Web -> Secure URL
and Unsecure URL I successfully changed the Secure URL but then could
not change the Unsecure URL and Magento would direct me to a "Whoops…"
page and wouldn't let me do any updates to the database via the
web admin interface after that.


EDIT: Perhaps I should have chosen:

Skip Base URL Validation Before the Next Step
Check this box only if it is not possible to automatically validate the Base URL.

during installation. But I'm not sure this is the answer and don't want to
take chances with the store, plus why in the world wouldn't the URL validation
not work from the install script?


If you can achieve this setup without any problems,
please post an answer to this post.

(Ideally I would like to enter the URL at install time and not have any trouble).

Thanks.


EDIT: What follows is from a previous post.


I wonder whether someone can help me set up my .htaccess files on Linux
as I cannot figure out exactly what is going wrong with my Magento install.

Here is my setup:

A) http://mydomain.com/ is served from the Unix directory /home/jsonderson/pulic_html/
which is the web server root directory for my domain.

B) For perfectly valid reasons (namely, I have different domains associated with
the same IP address, and these are being served, say http://foo.com/ from the
subdirectory /home/jsonderson/public_html/foo/. Hence to avoid making a mess
with top level files in public_html I created another directory called
/home/jsonderson/public_html/mydomain/ where the directory called mydomain
is simply what I have renamed my magento freshly unzipped directory after
unpacking the Magento 1.8.0.0 zip file.

C) OK, so here is what I want. I want http://mydomain.com/ to serve
from public_html/mydomain/ instead of from public_html/. For this the
hosting provider I used set me up with the following .htaccess script:

https://my.bluehost.com/cgi/help/000347

which seemed to be working fine when I went to install magento as when
I typed http:/mydomain.com/ the index.php install file was opened from
public_html/mydomain/ instead of public_html/ which is what I wanted.

D) But then, when I went to install Magento, I enabled server rewrites
to make Magento SEO friendly, and it asked me for the URL, and whenever
I gave it http://mydomain.com/ it complained saying something like it
could not connect (sorry for the vagueness) so I was forced to supply:
http://mydomain.com/mydomain/ which is the only thing which would
bring the installation script forward.

So I installed it, and it ran, but it ran in an SEO-unfriendly manner.
Accessing the domain at http://mydomain.com/ would make the
http://mydomain.com/mydomain part appear, not what I wanted.

E) So here is what I don't understand. I can now save the Unsecure URL
as http://mydomain.com/, and that works fine, SEO friendly all the
way and without the extra mydomain directory appearing.

However, here is what is not working:

When I change the Secure URL to http://mydomain.com/mydomain, and save it
(and I do have caching disabled), the UI brings me to the Magento standard
"Ops… Not Found" page at:
mydomain.com/index.php/admin/system_config/index/key/585f7925b5d04c630c4a7ec01340436d/
for instance (and note how the index.php magically and unwantedly reappears in there).
And then to access the admin panel again I have to type:
http://mydomain.com/mydomain/admin/
substituting the index.php part with mydomain.
When I do this I can see under System -> Configuration -> Web -> Secure
Magento totally discarded my change completely from the UI and kept the URL
http://mydomain.com/mydomain/
as the Secure URL, with the extra mydomain/ directory,
causing the admin panel to crash, screen after screen.

How can I fix this?

public_html/mydomain/.htaccess contains:

<IfModule mod_rewrite.c>
    Options +SymLinksIfOwnerMatch
    RewriteEngine on
    RewriteRule ^api/rest api.php?type=rest [QSA,L]
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
    RewriteRule .* - [L,R=405]
    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule .* index.php [L]
</IfModule>

and public_html/.htaccess contains:

AddHandler application/x-httpd-php54 .php

# BlueHost.com
    # .htaccess main domain to subdirectory redirect
    # Copy and paste the following code into the .htaccess file
    # in the public_html folder of your hosting account
    # make the changes to the file according to the instructions.
    # Do not change this line.
    RewriteEngine on
    # Change example.com to be your main domain.
    RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$
    # Change 'subdirectory' to be the directory you will use for your main domain.
    RewriteCond %{REQUEST_URI} !^/mydomain/
    # Don't change these line.
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # Change 'subdirectory' to be the directory you will use for your main domain.
    RewriteRule ^(.*)$ /mydomain/$1
    # Change example.com to be your main domain again.
    # Change 'subdirectory' to be the directory you will use for your main domain
    # followed by / then the main file for your site, index.php, index.html, etc.
    RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$
    RewriteRule ^(/)?$ mydomain/index.php [L]

So, how can I overcome that Magento hicckup.

I don't understand why Magento just won't accept the secure URL.

What do I need to do to get this to work.
I contacted support which were very good
but never got a workaround for not
getting errors in the admin panel,
which is very frustrating.

Thanks for your advice.

Best Answer

What you are describing is normally done using the so-called document root of the domain. The document root is specified in the Apache server configuration files (e.g. when you are using PLESK it is under /var/www/vhosts/yourdomain.com/conf/vhost.conf). In that file you would just put something in the lines of:

DocumentRoot  /home/jsonderson/pulic_html/mydomain

and then restart the web server to load the new configuration. Afterwards, the domain.com will point exactly to that folder and that is all you have to do.

Have a look at the apache virtual host configuration: http://httpd.apache.org/docs/current/vhosts/examples.html

Related Topic