У меня есть настройка iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.8.1:200
iptables -A POSTROUTING - t nat -o eth0 -j MASQUERADE
-A FORWARD -i eth0 -o wlan0 -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Где я запускаю виртуальный хост-сервер на apache по адресу 192.168.8.1:200 Работает нормально, страницы перенаправляются нормально, но только запросы домена верхнего уровня, например. www.google.com
, это перенаправляется на http://localhost/
.
НО: проблема заключается в запросах, например, на www.google.com/subpage
или www.anotherPage.com/subdir/subsubdir/page
, это вызывает ошибку 404 от apache. . Я хочу, чтобы он перенаправлял даже эти запросы подстраницы в корень на локальном хосте.
ПРЕДОСТЕРЕЖЕНИЕ: я мог бы настроить правило перезаписи htaccess, но это вызвало бы проблемы, поскольку оно также перенаправляло бы запросы на http://localhost/subdir/subpages
. Раз я этого не хочу, то какое разумное предложение?
Вдохновленный ответом @Hauke Laging, я убедился, что.htaccess находится в нужной мне папке, т.е. /var/www
, я написал этот код :
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f#if the requested is non existent as a file
RewriteCond %{REQUEST_FILENAME} !-d#if the requested is non-existent as a dir
RewriteRule (.*) / [L]
Теперь все в порядке. Если я запрашиваю несуществующие файлы или каталоги, меня перенаправляют в root. Имея в виду, что у меня все еще есть настройки NAT, теперь любой пользователь моего Wi-Fi попадает на мою локальную домашнюю страницу... независимо от того, что они вводят в адресную строку.
.htaccess
перенаправляет только то, что вы хотите. Вы просто должны сделать это правильно.
RewriteCond %{HTTP_HOST} =!localhost [NC]
RewriteRule.* http://localhost/