У меня есть веб-приложение MVC в стиле Laravel. Написано не на Laravel, но концепция аналогична.
В моем устройстве для разработки мое веб-приложение находилось в собственном «домене» с папкой /public, являющейся корнем документа.
Структура папки
MyProject
|
+-- App
| |
| +-- Models
| |
| +-- Views
| |
| +-- Controllers
|
+-- public (doc root)
|
+-- htaccess
+-- index.php
Я использовал этот файл .htaccess для маршрутизации всего трафика через файл index.php, который находился в общей папке.
htaccess
# Remove the question mark from the request but maintain the query string
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
Итак, когда вы посетили http://myinternalproject.com, вы могли нормально использовать веб-приложение.
Теперь для производства я должен переместить проект и все его файлы в отдельную папку в домене нашей компании. Это не мочь является поддоменом в соответствии с правами администратора (что решит все мои проблемы).
Поэтому доступ к нему должен осуществляться через www.mydomain.com/apps/myproject/.
Переход к: www.mydomain.com/apps/myproject/public работает нормально, и сайт появляется.
При переходе за пределы «домашней страницы» все ссылки переходят на www.mydomain.com/{controller}/{action} вместо того, чтобы жить в новой подпапке.
Есть ли способ переписать все ссылки в моем приложении, чтобы они автоматически переходили на /apps/myproject/public (так как именно там находится index.php) без прохождения всех возможных ссылок и префикса /apps/myproject/public?
Я пробовал различные варианты добавления новой структуры папок в htaccess, но не смог заставить ее работать.
RewriteBase /apps/myproject/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /apps/myproject/public/^(.*)$ /apps/myproject/public/index.php?$1 [L,QSA]






RewriteEngine on
# Change example.com to be your main domain.
RewriteCond %{HTTP_HOST} ^(www.)?xyz.com$
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteCond %{REQUEST_URI} !^/subdirectory/
# Don't change the following two lines.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteRule ^(.*)$ /subdirectory/$1
# Change example.com to be your main domain again.
# Change 'subdirectory' to be the directory you will use for your main domain
# followed by / then the main file for your site, index.php, index.html, etc.
RewriteCond %{HTTP_HOST} ^(www.)?xyz.com$
RewriteRule ^(/)?$ subdirectory/index.html [L]
Подробнее об этом здесь
замените подкаталог с вашим путем к каталогу
Изменив свой шаблон подкаталога, я могу перейти к файлу index.php в www.mydomain.com/apps/myproject/public/, но ни один из URL-адресов не переписывается, чтобы добавить app/myproject/.
Вы можете использовать это дополнительное правило в корневом каталоге вашего документа .htaccess:
RewriteEngine On
RewriteRule .* apps/myproject/public/$0 [L]
Тогда вы должны сохранить это правило внутри /apps/myproject/public/.htaccess:
RewriteEngine On
RewriteBase /apps/myproject/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?$0 [L,QSA]
Возможно, я не вставляю нужные данные, но я не могу заставить это работать. Я все время получаю ошибку 500.