Mod_rewrite для псевдонима одного типа суффикса файла другому

Я надеюсь, что смогу объяснить это достаточно ясно, но если нет, дайте мне знать, и я постараюсь уточнить.

В настоящее время я разрабатываю сайт с использованием ColdFusion, и у меня есть правило mod_rewrite, чтобы он выглядел так, как будто сайт использует PHP. Любые запросы к index.php обрабатываются index.cfm (правило сопоставляет * .php с * .cfm).

Это отлично работает - пока все хорошо. Проблема в том, что я хочу вернуть код состояния 404, если index.cfm (или любая страница ColdFusion) запрашивается напрямую.

Если я попытаюсь заблокировать доступ к файлам * .cfm с помощью mod_rewrite, он также вернет 404 для запросов к * .php.

Я полагаю, мне, возможно, придется изменить мою конфигурацию Apache, а не использовать .htaccess

Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
3
0
1 497
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Я бы посоветовал в первую очередь попробовать [L] протестировать правило, сопоставляющее файлы .php с .cfm.

Вы должны использовать две отдельные группы правил перезаписи, одну для .php, другую для .chm, и сделать их взаимоисключающими с помощью RewriteCond% {REQUEST_FILENAME}. И используйте флаг [L], как предлагает jj33.

Вы можете сохранить свои правила в .htaccess.

Ответ принят как подходящий

Вы можете использовать флаг S, чтобы пропустить правило 404, например:

RewriteEngine on

# Do not separate these two rules so long as the first has S=1
RewriteRule (.*)\.php$ .cfm [S=1]
RewriteRule \.cfm$ - [R=404]

Если вы также используете опцию Alias, вам также следует добавить флаг PT. Подробнее см. документация по mod_rewrite.

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