Использование htaccess переписать все возможные URL-адреса в веб-приложении в стиле MVC? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть веб-приложение 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]

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Вы можете использовать это дополнительное правило в корне вашего документа .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]
0 голосов
/ 10 сентября 2018
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]

Подробнее об этом здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...