.htaccess 如何为 public_html cpanel 工作
Posted
技术标签:
【中文标题】.htaccess 如何为 public_html cpanel 工作【英文标题】:How .htaccess works for public_html cpanel 【发布时间】:2019-04-02 02:14:14 【问题描述】:我在根目录中上传了一个 Laravel 项目:home/user/my-project-directory
,在public_html
中我有一个目录 some-directory-name。在这个目录中,我有一个公共的 Laravel 目录。
我不明白的部分是,我应该在哪里有一个.htaccess
文件?在public_html
目录或public_html
的每个目录中?
此时,当我访问 www.mydomain.ro 时,我得到了 public_html
目录的索引。选择 some-directory-name 后,我就可以访问我的网站了。
我为什么要问这个...如果我在 public_html
中有一个 .htaccess
文件,在 public_html/some-directory-name 中有一个 .htaccess
文件,或者如果我没有其中任何一个,该网站仍然可以正常工作。
【问题讨论】:
【参考方案1】:我不明白的部分是,我应该在哪里有一个
.htaccess
文件。在public_html
目录或public_html
的每个目录中?
这取决于您要达到的目标。但是在站点的文档根目录中只有一个.htaccess
文件是很常见的。文档根目录下的.htaccess
文件可以控制整个目录树。子目录中的.htaccess
文件会覆盖父.htaccess
文件并仅控制目录树的那个分支。
如果您想隐藏/重写 URL 路径中的 some-directory-name
,那么您不能仅使用 some-directory-name
子目录中的 .htaccess
文件来执行此操作,您需要使用 .htaccess
中的文件父目录。
如果您在每个目录中都有一个.htaccess
文件,那么它会变得非常混乱且难以维护。但这样做是有理由的(但您不必这样做)。
您也可以将 .htaccess
文件放在文档根目录上方 - 但这可能没有任何作用,具体取决于您的服务器配置。
如果我在
public_html
中有一个.htaccess
文件,在public_html/some-directory-name
中有一个.htaccess
文件,或者如果我没有其中任何一个,网站仍然可以正常运行。
那么也许您不需要.htaccess
文件。但是,如果您没有 .htaccess
文件,您将如何通过 Laraval 路由“漂亮”的 URL?
顺便说一句,如果您有权访问服务器配置,那么您根本不需要使用 .htaccess
。
旁白: 为什么你有一个/some-directory-name/public/
形式的目录结构(公共 URL 路径)?这是故意的吗?
更新:
我想做的是通过
www.mydomain.ro
而不是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
环境变量的条件是确保不会出现重写循环。
更新#2:如果您特别需要它仅适用于一个主机名,例如。 example.com
(并排除所有其他主机名/子域)然后添加附加条件:
RewriteEngine On
RewriteCond %HTTP_HOST ^example\.com [NC]
RewriteCond %ENV:REDIRECT_STATUS ^$
RewriteRule ^ /some-dir-name%REQUEST_URI [L]
更新#3:要使其也适用于子域,您可以修改 CondPattern 以使子域成为可选。例如:
RewriteCond %HTTP_HOST ^(subdomain\.)?example\.com [NC]
或者,添加一个附加条件并使用OR
标志。例如:
RewriteCond %HTTP_HOST ^example\.com [NC,OR]
RewriteCond %HTTP_HOST ^subdomain\.example\.com [NC]
【讨论】:
我想做的是通过 www.mydomain.ro 访问我的网站,而不是 www.mydomain.ro/public-dir-name,我认为我有一个 .htaccess 问题。我的结构是这样的: Home(root dir)/my-project-dir(all laravel app files without public dir) Home/public_html/some-dir-name(all public folder from laravel app) 此时,访问网站我需要这样:www.mydomain.ro/some-dir-name。我正在尝试摆脱 /some-dir-name 如果我这样做,我的子域将工作或所有的 URL 将指向 www.mydomain.ro? 只是为了说清楚....我需要编辑 home/user/public_html/some-dir-name 还是需要在 home/user/project 中创建一个 .htaccess 文件-dir 里面有你的代码吗? 这取决于您的子域在文件系统上指向的位置,但这很可能也会捕获您的所有子域。但是,您可以添加一个附加条件来仅重写您想要的域。我已经更新了我的答案。您只需要编辑文档根目录中的.htaccess
文件(大概是您的public_html
目录)。我假设你已经在 Laravel 根目录中有一个 .htaccess
文件。
您可以修改 CondPattern(RewriteCond
指令的第二个参数是正则表达式)。我已经更新了我的答案。以上是关于.htaccess 如何为 public_html cpanel 工作的主要内容,如果未能解决你的问题,请参考以下文章
如何为 .htaccess 文件中的某些媒体文件禁用 Apache gzip 压缩?
htaccess pcfg_openfile:无法检查 htaccess 文件,确保它是可读的并且“/files/domain.com/public_html/images/”是可执行的