Подстановочные знаки с Apache Directory и RewriteRule? - PullRequest
5 голосов
/ 09 февраля 2012

Я пытаюсь заставить FuelPHP работать на моем сервере. У меня нет доступа к использованию файла .htaccess для RewriteRule. Однако мой хост позволил мне указать часть файла httpd.conf.

Следующее работает для того, что я хочу:

<Directory /Applications/XAMPP/xamppfiles/htdocs/sandbox/username/public>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</Directory>

Однако мне нужно, чтобы он работал не только для имени пользователя. Как я могу использовать подстановочные знаки с этим каталогом, чтобы он работал для любых значений "username" для одноразового решения?

Я нашел этот совет в руководстве по apache , но я не уверен, как заставить его работать с RewriteRule.

Попробовал следующее, но это не сработало:

<Directory /Applications/XAMPP/xamppfiles/htdocs/sandbox/*/public>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</Directory>

Пожалуйста, помогите!

Ответы [ 2 ]

7 голосов
/ 04 октября 2012

Вы были близки с руководством Apache:

<Directory /Applications/XAMPP/xamppfiles/htdocs/sandbox/*/public>

до

<Directory ~ "/Applications/XAMPP/xamppfiles/htdocs/sandbox/.*/public">
1 голос
/ 09 февраля 2012

Мы нашли это сообщение, которое решило проблему, с которой у нас не было реального решения: Как использовать apache2 mod_rewrite в директиве Directory, которая использует подстановочные знаки?

В итоге мы использовали следующее решение:

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d

RewriteRule ^(/sandbox/([^/]*)/public/.*)$ /sandbox/$2/public/index.php?$1 [PT,QSA]

Необходимо добавить «PT», поскольку это обычно подразумевается в блоках каталогов, и говорит ему обрабатывать целевой путь как URI, а не как путь к файлу (который не будет работать, так как он не получает полный местный путь). Флаг QSA просто гарантирует, что ваш index.php получит всю первоначально отправленную информацию.

...