laravel - 添加斜杠时,Laravel 在 URL 中恢复为 /public/
问题描述
这是我.htaccess
在根目录中应该从 URL 中删除“公共”的目录:
<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]
确保在测试此更改之前完全清除浏览器缓存。
推荐阅读
- c++ - c++ 使用自动引用进行迭代
- c# - 为什么服务器没有关闭?
- android - 如何设置正确的路径以将 .apk 复制到 docker 容器
- firebase - Firebase 是否可以根据某个事件参数提醒我?
- jquery - 在选择的过程中为了方便在jquery中添加css样式类是不是错了?
- google-apps-script - 使用谷歌脚本识别谷歌表格上的特定图表
- javascript - 无法以编程方式连接到 mysql 服务器
- php - 查询只响应一个标签
- python - 使用 numpy 数组避免嵌套 if 语句
- ios - 从服务器存储解码的 JSON 数组的位置以及如何在 viewControllers 中全局访问它?