Назад | Перейти на главную страницу

Apache Добавление DocumentRoot в URL-адрес, когда www не используется - проблема может быть перезаписана

Когда я приезжаю www.mysite.com все хорошо. Когда я приезжаю 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 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>

Есть аналогичный VirtualHost для 443 (SSL).

Ниже мой журнал перезаписи, и DocumentRoot, кажется, уже был добавлен. Первое правило перезаписи - это правило htaccess в третьей строке.

[19 февраля 2014 г .: 09: 45: 44 --0800] [www.mysite.com/sid#9ffeb8 visible[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 февраля 2014 г .: 09: 45: 44 --0800] [www.mysite.com/sid#9ffeb8 visible[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 февраля 2014 г .: 09: 45: 44 --0800] [www.mysite.com/sid#9ffeb8 visible[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, вот так: Include /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>

Это может быть что-то простое, но меня это сводит с ума. Надеюсь, кто-то видел это раньше. Я могу предоставить любую дополнительную информацию!

Спасибо!

P.S. Я уже смотрел похожие посты: mod_rewrite добавление корня документа к url

но без кубиков. Мое заявление уже указывает на DocumentRoot.

Исправлена!

Я решил не использовать перезапись для моих перенаправлений без www на www. Вместо этого я добавил 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>