Часть, которую я не понимаю, где я должен иметь файл .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]