访问 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

【问题讨论】:

正确设置您的 Apache DocumentRoot 指向 public 文件夹。 @ceejayoz 这是一个共享主机。 大多数共享主机在不可通过 Web 访问的父文件夹中都有一个 httpdocspublicpublic_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数据库模型组件

Laravel 从 /public 文件夹外的 ROOT 调用。获取 NotFoundHttpException

laravel环境配置过程记录

P12:读取文章分类