整合.htaccess并修复bug

时间:2015-11-14 08:56:21

标签: apache .htaccess laravel mod-rewrite laravel-5

我应该首先说我不是.htaccess的专家,我所做的一切都来自我所遵循的教程。

我已经编辑了Laravel附带的库存标准.htaccess文件,以包含

  • 从网址中删除公开
  • 强制https
  • 将www.mysite.com的请求重定向到mysite.com

我目前遇到的问题是,当我访问路线mysite.com/sitemapwww.mysite.com/sitemap时,它会生成新的站点地图,然后重定向到mysite.com/index.php,有效地摆脱了漂亮的网址Laravel打算修复。

这是我公共目录中的.htaccess文件:

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

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Redirect www.mysite.com to mysite.com
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

    # Force SSL
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

这是我的根目录中的.htaccess文件

# Remove public
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]

这是我routes.php处理sitemap路线

Route::get('sitemap', function(){

    // create new sitemap object
    $sitemap = App::make("sitemap");

    // add items to the sitemap (url, date, priority, freq)
    $sitemap->add(URL::to('/'), '2015-11-14T20:10:00+02:00', '1.0', 'monthly');
    $sitemap->add(URL::to('getcv'), '2015-11-14T12:30:00+02:00', '0.9', 'monthly');

    // generate your sitemap (format, filename)
    $sitemap->store('xml', 'sitemap');
    // this will generate file sitemap.xml to your public folder

    return redirect('/');

});

我的问题是,如何才能使mysite.com/sitemapwww.mysite.com仍遵循.htaccess中的所有规则,同时在mysite.com之后重定向到sitemap { {1}}路线而非转到mysite.com/index.php

1 个答案:

答案 0 :(得分:1)

您需要在/public/.htaccess中重新排序规则:

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

    RewriteEngine On

    # Redirect www.mysite.com to mysite.com
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

    # Force SSL
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

确保在测试此更改时清除浏览器缓存。