У меня есть приложение (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
директива неправильно.)