htaccess子目录+ www上的301

时间:2015-06-01 17:55:25

标签: apache .htaccess redirect

我想用htaccess做两件事,但我无法弄清楚如何做到这一点。 我们说我的域名是domain.com 首先,我想强迫www。在具有301重定向的网址中。

另一件事,我的网站不是在根目录中托管,而是在/ laravel / public /

所以我想将此子目录设置为root,如果有人尝试www.domain.com/laravel/public/ =>,请将其从网址中删除。 www.domain.com

我该怎么做? 提前谢谢。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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>