【问题标题】:htaccess subdirectory + 301 on wwwhtaccess 子目录 + www 上的 301
【发布时间】:2015-06-01 17:55:25
【问题描述】:

我想用 htaccess 做两件事,但我不知道该怎么做。 假设我的域是 domain.com 首先,我想强制 www。在带有 301 重定向的 url 中。

另外,我的网站不在根目录,而是在 /laravel/public/

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

我该怎么做? 提前致谢。

【问题讨论】:

    标签: apache .htaccess redirect


    【解决方案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]
    

    【讨论】:

    • 第一条规则运行良好。 Bur 对于第二个,如果我尝试 www.domain.com/laravel/public/* 或 domain.com/laravel/public/*,子目录部分(/laravel/public/)不会从 url 中隐藏。跨度>
    • @rombat 为此,您需要进行第二次重定向。
    • 好的,谢谢。它会是什么样子? (我严重缺乏使用 htaccess 的知识)。
    • 还是不行。 /laravel/public/ 仍然在 url 中,有或没有 www
    【解决方案2】:

    您需要在域的根目录中拥有自己的 .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>
    

    【讨论】:

      猜你喜欢
      • 2012-06-01
      • 2013-07-12
      • 2021-04-04
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 2022-12-09
      • 2013-09-30
      相关资源
      最近更新 更多