我在 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 () {
//
});
答案 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等于/,前导斜杠,并且它会被误解为尾部斜杠。