Назад | Перейти на главную страницу

Доступ к подпапке приложения, когда само приложение находится во вложенной папке

У меня есть приложение (Symfony) в папке rapp и я хотел бы получить доступ через example.com/rapp/.

В index.php файл находится в rapp/public/ папка.

Поэтому я бы хотел, чтобы все мои запросы /rapp/ переписать на /rapp/public/index.php.

После того, как я много раз читал документы, у меня есть следующая конфигурация:

Alias /rapp/ "/var/www/html/rapp/"

<Directory /var/www/html/rapp/>

    AllowOverride None
    Order Allow,Deny

   Allow from All

    <IfModule mod_rewrite.c>

        Options -MultiViews
        RewriteEngine On
        RewriteBase /rapp

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /public/index.php/$1 [QSA,L,NC]

    </IfModule>
</Directory>

Я тестировал эту конфигурацию на htaccess.madewithlove.be и вроде как бы переписываю

Когда я копирую / вставляю URL результатов (изменение example.com ofc) он работает, я могу получить доступ к своему приложению, но оно по-прежнему не работает с "входным" URL http://example.com/rapp/admin/***.

Мне что-то не хватает в моей конфигурации?

RewriteEngine On
RewriteBase /rapp

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /public/index.php/$1 [QSA,L,NC]

Это переписывает все запросы на /public/index.php (в корне документа). В RewriteBase используемая здесь директива ничего не делает.

Вам следует удалить RewriteBase директиве полностью и удалите префикс косой черты на RewriteRule замена. Например:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) public/index.php/$1 [L]

В каталог контекст, родственник подстановка (без префикса косой черты) относится к префиксу каталога, т.е. /var/www/html/rapp/. Так что RewriteBase директива не требуется.

В QSA и NC флаги здесь излишни. Как и якоря на RewriteRule шаблон - регулярное выражение по умолчанию является жадным.

Результат, который вы видите с .htaccess инструмент тестера, с которым вы связались, неверен. (Казалось бы, применяя RewriteBase директива неправильно.)