2013-03-21 5 views
1

Я настраиваю apache для создания сайта, который будет использовать mod_jk для подключения к приложению, запущенному на tomcat.Использование mod_rewrite для возврата 404 для всех запросов на http

Я хочу только HTTPS запросов, чтобы получить доступ моего приложения, и я хотел бы использовать mod_rewrite для возврата 404 для любого запроса HTTP на порт 80.

Вот моя попытка конфигурации VirtualHost

<VirtualHost *:80> 
    ServerName admin.app.com 
    RewriteEngine On 
    RewriteRule^[L,R=404] 
</VirtualHost> 

<VirtualHost *:443> 
    ServerName admin.app.com 
    SSLEngine On 
    SSLCertificateFile /etc/apache2/ssl/bla.crt 
    SSLCertificateKeyFile /etc/apache2/ssl/bla.key 
    SSLCACertificateFile /etc/apache2/ssl/bla.ca 
    SSLProtocol all 
    SSLCipherSuite HIGHT:MEDIUM 

    JkMount /myapp* 

</VirtualHost> 

Теперь все хорошо и хорошо, когда ударяю https://admin.app.com/myapp - Я могу получить доступ к моему приложению tomcat, подтверждающему, что mod_jk и мои SSL-сертификаты работают так, как я ожидал, однако любой запрос url, который я делаю с http: //, возвращает 400 плохих запросов, а не 404, что я ожидал.

Я добавил RewriteLog и RewriteLogLevel 3 и получили следующий результат

(2) init rewrite engine with requested uri/
(3) applying pattern '^' to uri '/' 
(2) rewrite '/' -> '[L,R=404]' 
(2) local path result: [L,R=404] 
(2) init rewrite engine with requested uri /myapp/favicon.ico/ 
(3) applying pattern '^' to uri '/myapp/favicon.ico/' 
(2) rewrite '/myapp/favicon.ico/' -> '[L,R=404]' 
(2) local path result: [L,R=404] 

Что я истолковать означает, что ошибки 404 должны быть возвращены

Мой вопрос, почему я получаю 400 Bad Request, когда журнал похоже, правильно переписывает мои запросы на 404s, и, кроме того, что является наилучшей практикой в ​​отношении предоставления доступа к сайту только через https.

ответ

4

Вы не должны использовать код 404, потому что проблема заключается не в том, что страница не может быть найдена, а в том, что пользователь делает запрещенный запрос.

Вместо этого, попробуйте следующее:

RewriteRule^- [F] 

Затем вы можете использовать пользовательскую страницу 403 ошибки, чтобы объяснить, что только обеспеченные запросы разрешены к этому пути.

+3

Спасибо за ваш ответ, вы на самом деле ответили на мою проблему с плохим запросом, я пропустил дефис после карат ... Ввод его, похоже, заставляет его работать. Но я хотел также сказать о запрещенных, а не о 404, которые я бы предпочел 404, поскольку это форма безопасности от неясности в том, что, в отличие от 403, он скрывает тот факт, что там вообще есть какой-либо справочник. – tlcowling

+0

Я действительно задавался вопросом, может ли ваша недостающая проблема быть вашей проблемой, но я хотел посмотреть, могу ли я убедить вас вместо этого перейти на код ошибки 403. Безопасность по неизвестности редко длится долго, и не забывайте, что код 404 может заставить поисковые системы думать, что ваш сайт содержит ссылки на мертвые страницы, что может повредить ранжированию поиска и может иметь и другие побочные эффекты. Удачи, однако вы решили справиться с этим. – Bobulous

+2

@tlcowling должен согласиться с вами на этом, хотя Bobulous прав в этой безопасности от неизвестности, едва ли не нужно ни сообщать потенциальному злоумышленнику, что то, что они ищут, существует. Пока вы уверены, что нет ссылок на него, не хотите вредить усилиям SEO. –

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