2015-06-01 5 views
0

Я бы хотел сделать 2 вещи с htaccess, но я не могу понять, как это сделать. Допустим, мой домен domain.com Во-первых, я хотел бы заставить www. в URL-адресе с перенаправлением 301.htaccess подкаталог + 301 на www

Другое дело, мой сайт размещен не в корневом каталоге, но в/Laravel/государственные/

Так что я хотел бы установить этот подкаталог как корень, и удалить его из URL, если кто-то попытается WWW. domain.com/laravel/public/ => www.domain.com

Как я могу это сделать? Спасибо заранее.

ответ

1

Предполагая, что вы не можете изменить корень документа, чтобы указать на общую папку, вы можете попробовать добавить эти правила документа корень (а не общих папок):

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301] 

RewriteCond %{THE_REQUEST} \ /+lavarel/public/([^\?\ ]*) 
RewriteRule^/%1 [L,R=301] 

RewriteCond %{REQUEST_URI} !^/laravel/public/ 
RewriteRule ^(.*)$ /laravel/public/$1 [L] 
+0

Первое правило работает просто отлично. Bur для второго, если я попробую www.domain.com/laravel/public/* или domain.com/laravel/public/*, часть подкаталогов (/ laravel/public /) не скрыта от URL-адреса. – rombat

+0

@rombat Для этого вам потребуется вторая переадресация. –

+0

Хорошо спасибо. Как бы это выглядело? (Мне не хватает знаний об использовании htaccess). – rombat

0

Вам нужно чтобы иметь собственный файл .htaccess в корне вашего домена, а также другой в каталоге laravel/public (там уже есть один, но его необходимо изменить.

Ниже приведены два файла в полном объеме, так как у меня есть их мой тестовый сервер.

/.htaccess

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Rewrite requests to the laravel/public index 
    RewriteCond %{REQUEST_URI} !^/laravel/public/ 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ /laravel/public/$1 [L] 
</IfModule> 

/laravel/public/.htaccess

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Force www. (also strips laravel/public) 
    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

    # Strip laravel/public, prevent loops 
    RewriteCond %{ENV:REDIRECT_STATUS} !200 
    RewriteCond %{REQUEST_URI} ^/laravel/public(/.+)/? [NC] 
    RewriteRule^%1 [R=301,L] 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 
Смежные вопросы