访问 url.com/public 时 Laravel .htaccess 重定向到主页
Posted
技术标签:
【中文标题】访问 url.com/public 时 Laravel .htaccess 重定向到主页【英文标题】:Laravel .htaccess redirect to main page when accessing url.com/public 【发布时间】:2019-03-16 16:28:18 【问题描述】:我的网站在以下网址运行 www.mywebsite.com 没有任何问题。因此,在创建项目时,我在根文件夹中应用了一些 .htaccess
规则,如下所示:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Remove www
RewriteCond %HTTP_HOST ^www.mywebsite.com$ [NC]
RewriteRule ^(.*)$ https://mywebsite.com$1 [R=301,L]
# Remove http and force https
RewriteCond %HTTPS !=on
RewriteRule ^ https://%SERVER_NAME%REQUEST_URI [QSA,R,L]
RewriteCond %REQUEST_FILENAME -d [OR]
RewriteCond %REQUEST_FILENAME -f
RewriteRule ^ ^$1 [N]
RewriteCond %REQUEST_URI (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ server.php
</IfModule>
问题是,如果我访问 www.mywebsite.com/public
,我仍然可以查看该网站,但没有应用 CSS(因为 URL 错误)。
我怎样才能将 URL www.mywebsite.com/public
重定向到 www.mywebsite.com
,而不会触发我的 URL www.mywebsite.com/public/img/someimage.png
?
编辑:为了让自己清楚:
www.mywebsite.com -> it's working -> I don't want to change that
www.mywebsite.com/public/img/someimage.png -> it's working -> I don't want to change that
www.mywebsite.com/public -> It's working -> I see my website without the CSS applied -> I WANT to change this by redirecting users to www.mywebsite.com
【问题讨论】:
正确设置您的 ApacheDocumentRoot
指向 public
文件夹。
@ceejayoz 这是一个共享主机。
大多数共享主机在不可通过 Web 访问的父文件夹中都有一个 httpdocs
、public
、public_html
等文件夹。如果是这种情况,请将 Laravel 的 public
文件夹放在那里(如果不叫 public
,请咨询 ***.com/questions/30198669/…)。如果情况不是,那就找一个更好的主机。
(旁注:如果您想知道为什么这很重要,请查看此 Google 搜索:google.com/search?q=db_password+filetype%3Aenv)
@ceejayoz 我认为你不明白这个问题。我要编辑帖子。
【参考方案1】:
已解决。
通过编辑 /public_html/public/index.php
文件,我可以检查当前 URL 是否符合我的条件。
在我的例子中,只要字符串 public
出现在 URL 中,它总是有两个斜杠(因为 .htaccess
),例如:
www.mywebsite.com/public/
话虽如此,在文件的顶部:
if ($_SERVER['REQUEST_URI'] == '/public/')
header('location: http://' . $_SERVER['HTTP_HOST']);
exit;
【讨论】:
正如我在回答中所说,您所做的是非常危险。不要让您的public
文件夹之外的任何内容可用。
@ThomasEdwards 正如我在帖子中所说,public
文件夹之外的任何内容均不可用。
你的帖子很混乱。但是,您已经说过您项目的所有文件都在public_html
中,因此它们是可访问的。当然,您已经更改了文件权限并添加了 .htaccess,但是事情发生了变化,文件权限发生了变化,添加了新的包——任何事情。我们只想说这是一个高安全风险,您应该警惕它。有足够多的人说同样的话,你不应该傲慢到假设你知道得更好——你不知道。如果您的主机不好,请使用其他主机。祝你好运,我无意冒犯 - 但这是一个警告。
@ThomasEdwards 我告诉你有些东西行不通,你认为因为你的理论行不通而自大,这不是很令人印象深刻吗?如果代码不在public_html
中对您来说非常重要,请破解 90% 的代码在 public_html
中的网站,例如 Wordpress 网站。随意给我惊喜。如果你愿意,我可以私下告诉你我的项目 URL,并作为我的客人尝试访问私人文件。无意冒犯。
我给了你我的建议,其他人也说过同样的话。你选择了忽略它。没问题。【参考方案2】:
您绝不应该允许访问您的public
文件夹之外的任何内容。
您的服务器应设置为转到public
,而不是其上方的主文件夹。不要从public
文件夹中移动您的index.php
文件。
【讨论】:
抱歉,我以为我已经移动了index.php
文件,但我没有。但我的问题仍然存在。以上是关于访问 url.com/public 时 Laravel .htaccess 重定向到主页的主要内容,如果未能解决你的问题,请参考以下文章
PHP 独立使用 laravel ORM 数据库组件,PHP ORM数据库模型组件
PHP 独立使用 laravel ORM 数据库组件,PHP ORM数据库模型组件