Как .htaccess работает для public_html cpanel - PullRequest
0 голосов
/ 29 октября 2018

У меня есть проект Laravel, загруженный в корень: home/user/my-project-directory и в public_html у меня есть каталог some-directory-name. В этом каталоге у меня есть общедоступный каталог Laravel.

Часть, которую я не понимаю, где мне взять файл .htaccess? В каталоге public_html или в каждом каталоге public_html?

В этот момент, когда я захожу на www.mydomain.ro, я получаю индекс каталога public_html. После того, как я выберу какое-то имя-каталога, я могу получить доступ к своему веб-сайту.

Почему я спрашиваю это ... Если у меня есть файл .htaccess в public_html и файл .htaccess в public_html / some-directory-name или если у меня нет ни одного из них, сайт по-прежнему работает так же.

1 Ответ

0 голосов
/ 29 октября 2018

Часть, которую я не понимаю, где я должен иметь файл .htaccess. В каталоге public_html или в каждом каталоге public_html?

Это зависит от того, чего вы пытаетесь достичь. Но очень часто в корне документа вашего сайта есть только один .htaccess файл. Файл .htaccess в корне документа может управлять всем деревом каталогов. Файл .htaccess в подкаталоге переопределяет родительский файл .htaccess и контролирует только эту ветвь дерева каталогов.

Если вы хотите скрыть / переписать some-directory-name в URL-пути, то вы не можете сделать это, используя только файл .htaccess в подкаталоге some-directory-name, вам нужно будет использовать файл .htaccess в родительский каталог.

Если у вас есть файл .htaccess в каждом каталоге, он может стать очень грязным и сложным в обслуживании. Но для этого могут быть причины (но вам не обязательно).

Вы также можете поместить файл .htaccess над корнем документа - но это может ничего не делать, в зависимости от конфигурации вашего сервера.

Если у меня есть файл .htaccess в public_html и файл .htaccess в public_html/some-directory-name или если у меня нет ни одного из них, веб-сайт все равно работает.

Тогда, возможно, вам не нужен файл .htaccess. Тем не менее, как вы собираетесь направлять «красивые» URL-адреса через Laraval, если у вас нет файла .htaccess?

Кстати, если у вас есть доступ к конфигурации сервера, вам вообще не нужно использовать .htaccess.

В сторону: Почему у вас есть структура каталогов (публичный URL-путь) в форме /some-directory-name/public/? Это намеренно?


UPDATE:

Я пытаюсь получить доступ к моему веб-сайту через 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-путь.

Это также делает все URL вне каталога /public-dir-name недоступными. Если вам конкретно необходим доступ к этим файлам, то могут быть добавлены дополнительные условия.

Условие, которое проверяет переменную окружения 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]
...