Apache 在未使用 www 时将 DocumentRoot 添加到 URL - 可能是重写问题

Apache 在未使用 www 时将 DocumentRoot 添加到 URL - 可能是重写问题

当我访问www.mysite.com一切都很好。当我访问我的站点(没有 www)我被重定向到http://www.mysite.com/home/admin/domains/mysite.com/public_html这会出现 404 错误。

/home/admin/domains/mysite.com/public_html 是我的 DocumentRoot

我认为这个问题的发生与重写无关...但我可能错了。我认为这可能是我的 Apache 配置的问题。希望有人能发现一个常见的错误。

我的 VirtualHost 设置由 DirectAdmin 生成,如下所示:

<VirtualHost 192.154.96.50:80 >
    ServerName www.mysite.com
    ServerAlias www.mysite.com mysite.com
    ServerAdmin [email protected]
    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 [email protected]'
            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>

443 (SSL) 有一个类似的 VirtualHost。

下面是我的重写日志,DocumentRoot 似乎已经添加。第一个重写规则是第三行的 htaccess 规则。

[19/Feb/2014:09:45:44 --0800] [www.mysite.com/sid#9ffeb8][rid#d06080/initial] (3) [perdir /home/admin/domains/mysite.com/public_html/] 添加路径信息后缀:/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/] 删除每个目录的前缀:/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/] 将模式“^\.htaccess$”应用于 uri“home/admin/domains/mysite.com/public_html/”

我将 AllowOverrides 设置为 None。因此,不使用 htaccess 文件。我包括了 htaccess 文件中通常包含的所有内容,如下所示:包括 /home/admin/webfiles/bightaccess.conf

bightaccess.conf 不在 DocumentRoot 目录或子目录中。

以下是 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>

这可能很简单,但却让我抓狂不已。希望有人之前见过这个。我可以提供任何需要的额外信息!

谢谢!

PS:我已经看过类似的帖子:mod_rewrite 将 documentroot 添加到 url

但没用。我的语句已经指向 DocumentRoot。

答案1

固定的!

我决定不使用重写来实现非 www 到 www 的重定向。相反,我按照 Michael 的建议添加了 VirtualHosts(谢谢)。

仍然不确定为什么要添加 DocumentRoot。

(答案中使用了虚假网站 IP)

<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>

相关内容