2015-04-07 3 views
1

Я пытаюсь сделать фронт-контроллер, который будет игнорировать существующие каталоги. В некоторых случаях я получаю 301 переадресацию, где я бы этого не хотел. Я использую следующий .htaccess файл:Как предотвратить перенаправление 301, когда пользователь запрашивает папку?

DirectoryIndex index.php 
Options -Indexes 

RewriteEngine On 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?action=$1 [QSA,L] 

В каталоге я тестировал это, у меня есть следующие настройки:

test/ 
.htaccess 
index.php 

Если я пытаюсь запросить сервер, мой второй пример результаты в 301 редирект:

curl -s server/tes | Outputs: tes 
curl -s server/test | 301 Redirect; on follow will output: test 
curl -s server/test/ | Outputs: test/ 

Как я могу предотвратить 301 от происходящих при доступе к server/test? Я чувствую, что у меня здесь что-то довольно тривиальное.

ответ

1

Это происходит потому, что test - это каталог и mod_dir модуль, который запускается после mod_rewrite, добавляет конечную косую черту и перенаправляет 301. Вы можете предотвратить это, добавив следующую строку в верхней части .htaccess:

DirectorySlash Off 

Однако имейте в виду, что это считается риски безопасности, как это может показать список каталогов.

Вы можете сделать переадресацию в HTAccess сам, используя это правило:

# add a trailing slash to directories 
RewriteCond %{DOCUMENT_ROOT}/$1 -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302] 
+0

Именно то, что я искал! – jdknight

+0

В ситуации, когда я не возражаю против угрозы безопасности (просто используя ее локально), я все еще интересуюсь последствиями безопасности. Я замечаю, что [предупреждение о безопасности] (http://httpd.apache.org/docs/current/mod/mod_dir.html#DirectorySlash) упоминается, когда активен mod_autoindex ('Options + Indexes'). Поскольку у меня есть это отключить, 'Options -Indexes', со мной все будет в порядке? – jdknight

+0

Да, я думаю, что с опциями -Indexes это должно быть хорошо. – anubhava

Смежные вопросы