.htaccess - принудительное использование https, принудительное размещение вложенных папок, принудительное использование www, не прерывая работу сайта. - PullRequest
6 голосов
/ 19 января 2011

Мне было очень трудно редактировать мой файл .htaccess, чтобы сделать эти три вещи вместе.Мне удалось получить каждую часть отдельно, но я просто не понимаю, как работает логический поток, чтобы заставить их всех работать.

Это лучшее, что мне удалось собрать, используя демонстрацию при поддержке bluehosthttp://helpdesk.bluehost.com/index.php/kb/article/000347

Я благодарен за любую помощь в решении этой проблемы.

# Use PHP5 Single php.ini as default
AddHandler application/x-httpd-php5s .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 yourdomain.com to be your main domain.
RewriteCond %{HTTP_HOST} ^(www.)?sampleurl.com$
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteCond %{REQUEST_URI} !^/folder/
# Don't change this line.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteRule ^(.*)$ /folder/$1
# Change yourdomain.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 folder, index.php, index.html, etc.
RewriteCond %{HTTP_HOST} ^(www.)?sampleurl.com$
RewriteRule ^(/)?$ folder/index.php

RewriteCond %{HTTP_HOST} ^sampleurl\.com$ [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://www.sampleurl.com/$1 [L]

# For security reasons, Option all cannot be overridden.
# Options All -Indexes
# Options ExecCGI Includes IncludesNOEXEC SymLinksIfOwnerMatch -Indexes

Обновление:

Через долгое время, используя следующее, я столкнулся с проблемами.

IndexIgnore *
RewriteEngine On

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule (.*) https://www.example.com/site/$1 [L,R]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} ^/site/
RewriteRule (.*) https://www.example.com/$1 [L,R]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} !^/site/
RewriteRule (.*) https://www.example.com/site/$1 [L,R]

Новые проблемы.

  1. В Bluehost есть приложение, которое быстро устанавливает и обновляет приложения с открытым исходным кодом, такие как wordpress, joomla, phpbb и т. Д. Очевидно, мой новый файл super .htaccess.полностью ломает их систему.Единственный способ запустить обновления и установки - переместить файл .htaccess в .htaccess.bak, пока не завершится обновление или установка.Затем переместите его обратно.

  2. Я не могу создать .htaccess на других сайтах, которые я размещаю в других каталогах.например, у меня есть основная учетная запись, которую я храню в / www / site /, в которую этот скрипт форсирует запросы.К сожалению, мои другие сайты, хранящиеся в / www / site2 / и / www / site3 /, не работают.Сначала я должен создать пустой .htaccess, чтобы предотвратить вытягивание .htaccess выше, найденного в / www /.По какой-то причине, если я пытаюсь сделать что-то вроде форсинга, www.site2.com я получаю 500 ошибок, говорящих о том, что я форсирую слишком много перенаправлений.

У меня есть теория, что мое решение выше должнобыть более конкретным, чтобы убедиться, что это влияет только на запрос, отправленный на example.com.(Я думаю, что строка с чем-либо, не содержащим / site /, немного широка).

Я ценю любую поддержку, решающую эту проблему.Избавил бы меня от головной боли!

Обновление II:

Я не верю, что у меня есть доступ к конфигурации Apache.Единственный вариант, который я вижу в cpanel - это обработчики apache (не совсем уверен, что делает этот раздел).

Я отправлю тикет, чтобы узнать, из какого места запускается сервер простых скриптов.Я полагаю, что он запускается с "https://www.simplescripts.com". Какие изменения вы бы порекомендовали добавить, чтобы игнорировать этот домен?

Мой хост bluehost запускает вас с основной учетной записью, а затем с поддоменами. Местоположение основной учетной записи задается по адресу user \ wwwК сожалению, это становится грязным, когда вы пытаетесь разместить несколько доменов. Вот почему я использую .htaccess для принудительной обработки запросов, попадающих в этот каталог, в каталог \ site \. Таким образом, основной сайт переходит в каталог \ site \.

Я думаю, что проблема перемещения с одним из моих поддоменов возникла из-за того, что wordpress пытался форсировать домен без www, а затем я написал файл .htaccess, форсирующий www. Это вызвало бесконечный цикл, а не мой файл .htaccess в этой темео. Если я могу решить проблему с простыми скриптами, я gmoney;)

Ответы [ 2 ]

4 голосов
/ 19 января 2011

Я думаю, что-то вроде этого будет работать

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/folder/
RewriteRule (.*) https://www.example.com/folder/$1 [L,R]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} ^/folder/
RewriteRule (.*) https://www.example.com/$1 [L,R]

но, признаюсь, я не проверял. Вы можете добавить все не перенаправлять, если файл существует, и т. Д., Если хотите.

Если вы этого не видели, вот документация mod_rewrite .

редактирование:

В ответ на обновленный вопрос:

Первое, что я замечаю, это то, что, похоже, у вас достаточно контроля над настройками, чтобы переписать файлы конфигурации Apache (в разделах VirtualHost) вместо файлов htaccess, что немедленно решит вашу проблему с вашим другие сайты.

Первая проблема, похоже, вам нужно добавить RewriteCond для исключения любых URL-адресов, используемых программным обеспечением Bluehost. Либо так, либо получите доступ к программному обеспечению Bluehost из другого VirtualHost (как только вы поместите материал для перезаписи в блоки VirtualHost).

Если вы не можете редактировать свою конфигурацию Apache, тогда проще всего исправить это для других сайтов, чтобы они не превращались в подкаталог (в файловой системе) вашего основного сайта. Во всяком случае, это довольно странно. При необходимости переместите свой основной сайт в подкаталог /www.

Лично я размещаю все сайты в /srv/www/com.site-name.www на своих серверах (то есть, в обратном порядке, сначала с доменом верхнего уровня, при сортировке в алфавитном порядке связанные группы материалов объединяются. Например, если у вас есть www.example .com и static.example.com)

0 голосов
/ 19 января 2011

Кажется, это делает все, что мне нужно. Вероятно, более короткий способ сделать это, но это работает! IndexIgnore * ПереписатьEngine On

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/folder/
RewriteRule (.*) https://www.example.com/folder/$1 [L,R]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} ^/folder/
RewriteRule (.*) https://www.example.com/$1 [L,R]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} !^/folder/
RewriteRule (.*) https://www.example.com/folder/$1 [L,R]
...