Laravel 5删除尾部斜杠时的不良行为

时间:2015-12-23 18:04:50

标签: php laravel

我在 mywebsite.com/laravel / 下创建了一个Laravel项目。当我去 mywebsite.com/laravel/test 时,一切正常,但当我去 mywebsite.com/laravel/test / 时,我被重定向到< EM> mywebsite.com/test

我的 / laravel 目录中有 index.php .htaccess 文件。这是我的 .htaccess 文件:

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

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteBase /laravel
RewriteRule ^(.*)/$ /$1 [L,R=301]

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

我不知道为什么RewriteBase不起作用。我已经尝试了 / laravel / laravel / laravel ;没有用。

我的routes.php文件

<?php
Route::get('/test/{name?}', 'MainController@index');

Route::group(['middleware' => ['web']], function () {
    //
});

2 个答案:

答案 0 :(得分:7)

解决方案是改变

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

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

在我的情况下,在浏览器中清除缓存:)。

答案 1 :(得分:2)

这对我有用;从所有路由中删除所有尾部斜杠,同时强调REQUEST_URI以斜杠开头(至少在.htaccess文件中):

替换:

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

使用:

# Remove all trailing slashes    
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.*)/$
RewriteRule ^ /%1 [R=301,L]

这会将 mywebsite.com/laravel/test / 重写为 mywebsite.com/laravel/test / ,而无需重定向 mywebsite.com/测试

不要使用 %{REQUEST_URI} (.*)/$。因为在根目录中REQUEST_URI等于/,前导斜杠,并且它会被误解为尾部斜杠。

消息来源: https://stackoverflow.com/a/27264788/2732184