2016-05-25 2 views
0

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

public_html 
-- .htaccess 
-- site1 
---- .htaccess 
-- site2 
-- site3 

файл .htaccess в корневом каталоге выглядит следующим образом:

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteCond %{REQUEST_URI} !^/subdirectory/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /subdirectory/$1 
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteRule ^(/)?$ subdirectory/ [L] 

Это прекрасно работает, но я думаю, что есть проблемы с этим, и файл .htaccess в моем site1 каталоге. Если я ввожу URL, он иногда перенаправляется на example.com/site1. Таким образом, веб-сайт отображается точно так же на example.com и example.com/site1, но я не хочу, чтобы он отображался как example.com/site1. Второй файл .htaccess внутри каталога site1 показан ниже.

RewriteEngine on 

# Change default directory page 
DirectoryIndex /home/ 

# Remove .php extension 
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/(.+)/$ 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteRule ^(.*)/$ $1.php [L] 

# Ensure all directory URLs have a trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301] 

# Same for HTTPS 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301] 

# Redirect default error page to home page 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(/|error/)?$ /home/ [R=301,L] 

# Error Documents 
ErrorDocument 400 /error/?e=400 
ErrorDocument 401 /error/?e=401 
ErrorDocument 403 /error/?e=403 
ErrorDocument 404 /error/?e=404 
ErrorDocument 500 /error/?e=500 

# Prevent viewing of htaccess file 
<Files .htaccess> 
    order allow,deny 
    deny from all 
</Files> 

Я не уверен, если это проблема с различными правилами перезаписи, которые я использую, что влияет на URL, но я был бы признателен за любую помощь, если она может быть решена.

Заранее спасибо, и я прошу прощения, если мое описание не очень велико.

ответ

1

Попробуйте

# Ensure all directory URLs have a trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [QSA,L,R=301] 

# Same for HTTPS 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,L,R=301] 

Это работает для меня. % {REQUEST_URI} содержит site1, поэтому не используйте его. QSA добавляет любые параметры URL, такие как? Param1 = val1 & param2 = val2 Если вы их не используете, вы можете опустить QSA. Также при тестировании замените R = 301 на R = 302 (временное перенаправление), иначе ваш браузер помнит правило и не отправляет запрос еще раз.

+0

Спасибо за ваш ответ! Если ваши изменения включены, если я нахожусь в URL example.com/home и целенаправленно опускаю конечную косую черту, вместо перенаправления, чтобы включить трейлинг-косую черту, сайт не загружается из-за слишком большого количества перенаправлений! Это может быть полезно, чтобы добавить меня поддиректорию внутри папки site1 для сайта активов с помощью файла .htaccess, содержащий: 'Опции -Indexes RewriteEngine На RewriteBase/ # Disallow доступа каталога IndexIgnore *' и проблема возникает главным образом при отсутствии конечной косой черты в папке с ресурсами. – JakeGriffin

+1

К сожалению, в первом блоке добавлен трейлинг-косая черта. –

+0

Спасибо, Василий, что работает на страницах в главном каталоге! Однако, я сказал выше, у меня есть подкаталог ресурсов с доступом к блокировке файлов .htaccess. Если я перейду к example.com/assets/, он отлично работает, но если я опускаю конечную косую черту, она перенаправляется на example.com/site1/assets/. Как это можно решить? – JakeGriffin

Смежные вопросы