В зависимости от Вашего приложения программный брандмауэр в ОС мог бы быть достаточно хорошим, но NIC не является частным просто, потому что Вы маркируете это частным. NICs находятся на том же широковещательном домене, и любой NIC на том широковещательном домене может связаться с любым другим NIC на том широковещательном домене. Если Вы хотите, чтобы это не имело место, Вам нужны или физическая сеть или в разделение логической схемы.
То, что это не работает должным образом, связано с порядком выполнения RewriteConds и RewriteRules. RewriteRules оцениваются перед RewriteConds, которые им предшествуют. Итак, ваш запрос на /public/my-file.html
обрабатывается следующим образом:
(Я сохраню вашу нумерацию)
. *
в конце концов соответствует чему угодно .. RewriteConds (а у вас может быть несколько) принадлежат RewriteRule, которое следует за ними, и оцениваются только в том случае, если шаблон в RewriteCond совпадает первым. Я знаю, это немного нелогично.
О синтаксисе читайте здесь: Перенаправление, изменение URL-адресов или перенаправление HTTP на HTTPS в Apache - все, что вы когда-либо хотели знать о правилах Mod_Rewrite, но боялись спросить
Как решить вашу проблему?
Может быть, что-то вроде:
RewriteRule ^/public/(.*)$ /$1 [R=301,L]
RewriteRule ^(-*)$ /public/$1
И последний совет: включите перезапись журнала. Вы узнаете набор ...
Вы можете просто проверить наличие реальных файлов / папок и пропустить ..
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
У вас может быть несколько Cond перед правилом.