.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]
我在根目录中上传了一个 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. Inpublic_html
directory or in every directory frompublic_html
?
这取决于您要实现的目标。但是在站点的文档根目录中只有一个 .htaccess
文件是很常见的。文档根目录下的.htaccess
文件可以控制整个目录树。子目录中的 .htaccess
文件覆盖父 .htaccess
文件并仅控制目录树的那个分支。
如果你想 hide/rewrite URL 路径中的 some-directory-name
那么你不能仅使用 [=21= 中的 .htaccess
文件来做到这一点] 子目录,则需要使用父目录中的 .htaccess
文件。
如果您在每个目录中都有一个 .htaccess
文件,那么它会变得非常混乱并且难以维护。但是这样做可能是有原因的(但你不必这样做)。
您也可以将 .htaccess
文件放在文档根目录之上 - 但这可能不会执行任何操作,具体取决于您的服务器配置。
If i have a
.htaccess
file inpublic_html
and a.htaccess
file inpublic_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
, notwww.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]