Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

When I visit www.mysite.com all is well. When I visit mysite.com (without the www) I get redirected to http://www.mysite.com/home/admin/domains/mysite.com/public_html which gives a 404 error.

/home/admin/domains/mysite.com/public_html is my DocumentRoot

I believe this problem occurs without rewriting happening... but I could be wrong. I think it my be something with my Apache config. Hopefully someone will spot a common mistake.

My VirtualHost setting was generated by DirectAdmin and is as follows:

<VirtualHost 192.154.96.50:80 >
    ServerName www.mysite.com
    ServerAlias www.mysite.com mysite.com
    ServerAdmin webmaster@mysite.com
    DocumentRoot /home/admin/domains/mysite.com/public_html
    ScriptAlias /cgi-bin/ /home/admin/domains/mysite.com/public_html/cgi-bin/
    UseCanonicalName OFF
    <IfModule !mod_ruid2.c>
            SuexecUserGroup admin admin
    </IfModule>
    CustomLog /var/log/httpd/domains/mysite.com.bytes bytes
    CustomLog /var/log/httpd/domains/mysite.com.log combined
    ErrorLog /var/log/httpd/domains/mysite.com.error.log
    <Directory /home/admin/domains/mysite.com/public_html>
            php_admin_flag safe_mode OFF
            php_admin_flag engine ON
            php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f admin@mysite.com'
            php_admin_value mail.log /home/admin/.php/php-mail.log
            php_admin_value open_basedir /home/admin/:/tmp:/var/tmp:/usr/local/lib/php/
    </Directory>

There is a similar VirtualHost for 443 (SSL).

Below is my rewrite log and the DocumentRoot seems to have already been added. The first rewrite rule is the htaccess one on the third line.

[19/Feb/2014:09:45:44 --0800] [www.mysite.com/sid#9ffeb8][rid#d06080/initial] (3) [perdir /home/admin/domains/mysite.com/public_html/] add path info postfix: /home/admin/domains/mysite.com/public_html/home -> /home/admin/domains/mysite.com/public_html/home/admin/domains/mysite.com/public_html/

[19/Feb/2014:09:45:44 --0800] [www.mysite.com/sid#9ffeb8][rid#d06080/initial] (3) [perdir /home/admin/domains/mysite.com/public_html/] strip per-dir prefix: /home/admin/domains/mysite.com/public_html/home/admin/domains/mysite.com/public_html/ -> home/admin/domains/mysite.com/public_html/

[19/Feb/2014:09:45:44 --0800] [www.mysite.com/sid#9ffeb8][rid#d06080/initial] (3) [perdir /home/admin/domains/mysite.com/public_html/] applying pattern '^\.htaccess$' to uri 'home/admin/domains/mysite.com/public_html/'

I have AllowOverrides set to None. So, no htaccess files are used. I include all the stuff that would normally be in htaccess files like so: Include /home/admin/webfiles/bightaccess.conf

bightaccess.conf is not in the DocumentRoot directory or a subdirectory.

Here are the rewrite directives in bightaccess.conf

<Directory ~ "/home/admin/domains/mysite.com/(private|public)_html">
    Options +FollowSymLinks -Indexes -MultiViews
    <IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteBase /

    # Deny access from .htaccess
    RewriteRule ^\.htaccess$ - [F]
    ServerSignature off

    # ensure https is used for certain pages
    RewriteCond %{HTTPS} off
    RewriteCond %{QUERY_STRING} main_page=(login|login_vendor|password_forgotten|create_account|account|order|address_book|gv_|contact|download^s|report|submit_product|time_out|time_out_vendor|coupon_lookup)
   RewriteRule ^/?(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

   # ensure https is used for certain pages
   # used when Simple SEO URL aliases are used
   RewriteCond %{HTTPS} off
   RewriteCond %{REQUEST_URI} login|login_vendor|password_forgotten|create-account|account|order|address_book|gv_|contact|download^s|report|submit-product|time_out|time_out_vendor|coupon_lookup
   RewriteRule ^/?(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

 # add www to top level domain
 # got this from rewrite manual
 RewriteCond %{SERVER_PORT} 80
 RewriteCond %{HTTP_HOST} !^www\.mysite\.com [NC]
 RewriteCond %{HTTP_HOST} !^$
 RewriteRule ^/?(.*) http://www.mysite.com/$1 [L,R,NE]

 # add www to top level domain
 RewriteCond %{SERVER_PORT} 443
 RewriteCond %{HTTP_HOST} !^www\.mysite\.com [NC]
 RewriteCond %{HTTP_HOST} !^$
 RewriteRule ^/?(.*) https://www.mysite.com/$1 [L,R,NE]


 RewriteCond %{SCRIPT_FILENAME} !-f
 RewriteCond %{SCRIPT_FILENAME} !-d
 RewriteRule ^/?(.+) index.php/$1 [E=VAR1:$1,QSA,PT,L]

</Directory>

This may be something simple but it's been driving me bonkers. Hopefully someone out there will have seen this before. I can provide any additional info needed!

Thanks!

P.S. I've already looked at similar posts: mod_rewrite adding documentroot to url

but no dice. My statement already points to the DocumentRoot.

share|improve this question
    
The logs that you've shown seem to be from the client's request after the redirect has been sent to them - is there anything logged by rewrite on the request where the 30x response is sent? –  Shane Madden Feb 25 at 20:28
    
I always recommend you place the non-www version in its own VirtualHost, that contains nothing but the redirect. –  Michael Hampton Feb 25 at 20:35

1 Answer 1

Fixed!

I decided not to use rewrite for my non-www to www redirects. Instead I added VirtualHosts as Michael suggested (thanks).

Still not sure why DocumentRoot was being added.

(fake site IP used in answer)

<VirtualHost 192.168.0.100:80>
  ServerName mydomain.com
  Redirect / http://www.mydomain.com
</VirtualHost>

<VirtualHost 192.168.0.100:443>
  ServerName mydomain.com
  Redirect / https://www.mydomain.com
</VirtualHost>
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.