当我访问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>