Использование htaccess для перезаписи всех возможных URL-адресов в веб-приложении в стиле MVC?

У меня есть веб-приложение 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]
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
40
2

Ответы 2

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]

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

Возможно, я не вставляю нужные данные, но я не могу заставить это работать. Я все время получаю ошибку 500.

user-44651 10.09.2018 16:55

замените подкаталог с вашим путем к каталогу

Saurav 10.09.2018 16:57

Изменив свой шаблон подкаталога, я могу перейти к файлу index.php в www.mydomain.com/apps/myproject/public/, но ни один из URL-адресов не переписывается, чтобы добавить app/myproject/.

user-44651 10.09.2018 17:02

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

Другие вопросы по теме