.htaccess 如何用于 public_html cpanel

How .htaccess works for public_html cpanel

我在根目录中上传了一个 Laravel 项目:home/user/my-project-directory 并且在 public_html 中我有一个目录 some-directory-name。在这个目录中,我有一个 public Laravel 目录。

我不明白的部分是,我应该在哪里有一个 .htaccess 文件?在 public_html 目录或 public_html?

中的每个目录中

此刻,当我转到 www.mydomain.ro 时,我得到了 public_html 目录的索引。在我 select some-directory-name 之后,我可以访问我的网站。

为什么我要问这个...如果我在 public_html 中有一个 .htaccess 文件,在 public_html/some-directory-name 中有一个 .htaccess 文件,或者如果我没有有任何一个,网站仍然可以正常工作。

The part that i don't understand is, where should i have a .htaccess file. In public_html directory or in every directory from public_html?

这取决于您要实现的目标。但是在站点的文档根目录中只有一个 .htaccess 文件是很常见的。文档根目录下的.htaccess文件可以控制整个目录树。子目录中的 .htaccess 文件覆盖父 .htaccess 文件并仅控制目录树的那个分支。

如果你想 hide/rewrite URL 路径中的 some-directory-name 那么你不能仅使用 [=21= 中的 .htaccess 文件来做到这一点] 子目录,则需要使用父目录中的 .htaccess 文件。

如果您在每个目录中都有一个 .htaccess 文件,那么它会变得非常混乱并且难以维护。但是这样做可能是有原因的(但你不必这样做)。

您也可以将 .htaccess 文件放在文档根目录之上 - 但这可能不会执行任何操作,具体取决于您的服务器配置。

If i have a .htaccess file in public_html and a .htaccess file in public_html/some-directory-name or if i don't have any one of them, the website still works the same.

那么也许您不需要 .htaccess 文件。但是,如果你没有 .htaccess 文件,你将如何通过 Laraval 路由 "pretty" URLs?

顺便说一句,如果您有权访问服务器配置,那么您根本不需要使用 .htaccess

旁白: 为什么你的目录结构(public URL-路径)的形式是/some-directory-name/public/?是故意的吗?


更新:

What i'm trying to do is to access my website via www.mydomain.ro, not www.mydomain.ro/some-dir-name

在这种情况下,您需要使用文档根目录中的 .htaccess 文件 内部重写 所有对 /some-dir-name 子目录的请求。例如:

RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ /some-dir-name%{REQUEST_URI} [L]

您还需要确保项目中的所有 URL 不包含 /public-dir-name URL-路径。

这也会使 /public-dir-name 目录之外的所有 URL 都无法访问。如果您特别需要访问这些文件,则可以添加其他条件。

检查 REDIRECT_STATUS 环境变量的条件是确保不会出现重写循环。

UPDATE#2: 如果您特别需要它只适用于一个主机名,例如。 example.com(并排除所有其他主机名/子域)然后添加附加条件:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ /some-dir-name%{REQUEST_URI} [L]

UPDATE#3: 要使其也适用于子域,您可以修改 CondPattern 以使子域可选。例如:

RewriteCond %{HTTP_HOST} ^(subdomain\.)?example\.com [NC]

或者,添加附加条件并使用 OR 标志。例如:

RewriteCond %{HTTP_HOST} ^example\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com [NC]