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


Laravel 5 bad behaviour while removing trailing slash

我已经在mywebsite.com/Laravel/下创建了一个Laravel项目。当我转到mywebsitecom/Laravel/test时,一切都很好,但当我转到mysite.com/laravil/test时,我会被重定向到my website.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为什么不起作用。我试过/lavelv/Lavelv/laravelv;什么也没用。

我的routes.php文件

<?php
Route::get('/test/{name?}', 'MainController@index');
Route::group(['middleware' => ['web']], function () {
    //
});

解决方案是更改

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

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

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

这对我有效;删除所有路由中的所有尾部斜杠,同时强调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/slaravel/test/,而不会重定向您mywebite.com/test

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

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