微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

添加尾随斜杠后,Laravel 在 URL 中恢复为 /public/

如何解决添加尾随斜杠后,Laravel 在 URL 中恢复为 /public/

这是我在根目录中的 .htaccess,应该从 URL 中删除“public”:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

这是我在公共目录中的 .htaccess,应该去掉尾部斜杠:

<IfModule mod_rewrite.c>
    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]
</IfModule>

这一切都很好,只是当我输入一个带有斜杠的 URL 时,它重定向一个没有斜杠的 URL,但还添加/public

例如,我们有这条路线:

Route::get('/de','HomeController@index')->name('home');

通常,URL 类似于 domain.com/de。

但是,如果我在浏览器中输入 domain.com/de/,它会重定向domain.com/public/de 而不是 domain.com/de - 并且页面正常加载。

我该如何解决这个问题?

解决方法

您的站点根目录 .htaccess 应该是这样的:

RewriteEngine On

# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301,NE]

# route all requests to public/
RewriteRule ^(.*)$ public/$1 [L]

然后在 public/.htaccess 里面有这个代码:

RewriteEngine On

# if /public/ is part of original URL then remove it
RewriteCond %{THE_REQUEST} /public/(\S*) [NC]
RewriteRule ^ /%1 [L,NE,R=301]

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

在测试此更改之前,请确保完全清除浏览器缓存。

,

Apache/Nginx 应该指向public 目录而不是项目根目录

这样你就不需要添加任何 .htaccess 规则来去除 URL 中的“public”字符串

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。