2015-06-01 33 views
0

我想用htaccess做2件事,但我無法弄清楚如何做到這一點。 假設我的域名是domain.com 首先,我想強制www。在與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>