Я пытаюсь закрыть веб-сайт для всех, кроме моего IP-адреса. У меня почти все работает. Я не могу получить доступ к www.mysite.com, но могу получить доступ ко всем папкам, в которых есть другой файл .htaccess.
У меня есть файл .htaccess в / www со следующим кодом:
#Use this when website is down
RewriteEngine on
#this allows access through my ip
RewriteCond %{REMOTE_ADDR} !^(66\.777\.888\.99)$
RewriteRule !down.php$ /down.php [L]
В некоторых папках на моем сайте есть файлы .htaccess. Если у меня есть файл со строкой:
RewriteEngine on
Я все еще могу получить доступ к папке. Например, если у меня есть второй файл .htaccess в / www / about, я все равно могу получить доступ к mysite.com/about (но файл .css, включенный на этой странице, фактически загружает down.php).
Если я удалю «RewriteEngine on», я буду перенаправлен на down.php.
Любые идеи? Я думаю, что мой mod_rewrite путается с несколькими файлами .htaccess.
Спасибо!
как насчет того, чтобы поставить:
Order deny,allow
Deny from all
Allow from ip.ad.dre.ss
в твоем .htaccess
файл? или даже в общесистемной конфигурации httpd?
Если вы можете получить доступ к конфигурации вашего (виртуального) хоста, почему бы не добавить эти строки?
<Location />
Order deny,allow
Deny from all
Allow from 1.1.1.1
ErrorDocument 403 /down.php
</Location>
<Location /down.php>
Order allow,deny
Allow from all
</Location>
Проверьте свой файл журнала apache на наличие ошибок, возможно, вы увидите где-то 404 для about / down.php. В противном случае следующие советы по отладке Mod Rewrite по умолчанию:
Попробуйте добавить это в свою http-конфигурацию (где-то в конфигурации она не работает на уровне htaccess или virtualhost)
RewriteLog /tmp/rewrite.log
RewriteLogLevel 9
Это предоставит вам построчное объяснение того, что он пытается сопоставить с каким регулярным выражением, и каково окончательное решение.
Удалите эти строки после этого, иначе однажды вы обнаружите, что у вас не так много места на диске, как вы думали ...
Спасибо за отзыв о RewriteLog. Я проверил это, и похоже, что файл .htaccess в корне сайта применим только к каталогам, у которых нет собственного файла .htaccess со строкой «RewriteEngine on».
обратите внимание, 12.345.678.90 - это мой ip, а 99.888 ... это ip, который я хочу разрешить для просмотра.
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b878d060/initial] (1) [perdir /srv/www/mysite.com/about/] pass through
/srv/www/mysite.com/about/
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b879b090/subreq] (1) [perdir /srv/www/mysite.com/about/] pass through
/srv/www/mysite.com/about/index.html
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b879b090/subreq] (1) [perdir /srv/www/mysite.com/about/] pass through
/srv/www/mysite.com/about/index.cgi
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b879b090/subreq] (1) [perdir /srv/www/mysite.com/about/] pass through
/srv/www/mysite.com/about/index.pl
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b879b090/subreq] (1) [perdir /srv/www/mysite.com/about/] pass through
/srv/www/mysite.com/about/index.php
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8791070/initial] (1) [perdir /srv/www/mysite.com/about/] pass through
/srv/www/mysite.com/about/css/about.css
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b87df100/initial] (3) [perdir /srv/www/mysite.com/] strip per-dir prefix:
/srv/www/mysite.com/requires/css/header.css -> requires/css/header.css
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b87df100/initial] (3) [perdir /srv/www/mysite.com/] applying pattern
'down.php$' to uri 'requires/css/header.css'
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b87df100/initial] (4) [perdir /srv/www/mysite.com/] RewriteCond:
input='12.345.678.90' pattern='!^(99\.888\.777\.88)$' => matched
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b87df100/initial] (2) [perdir /srv/www/mysite.com/] rewrite
'requires/css/header.css' -> '/down.php'
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b87df100/initial] (1) [perdir /srv/www/mysite.com/] internal redirect with
/down.php [INTERNAL REDIRECT]
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8790810/initial/redir#1] (3) [perdir /srv/www/mysite.com/] strip per-dir
prefix: /srv/www/mysite.com/down.php -> down.php
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8790810/initial/redir#1] (3) [perdir /srv/www/mysite.com/] applying pattern
'down.php$' to uri 'down.php'
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8790810/initial/redir#1] (3) [perdir /srv/www/mysite.com/] strip per-dir
prefix: /srv/www/mysite.com/down.php -> down.php
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8790810/initial/redir#1] (3) [perdir /srv/www/mysite.com/] applying pattern
'^(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])-((19|20)\d\d)/?(/([a-zA-Z0-9_-]{1,20}))?$' to uri 'down.php'
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8790810/initial/redir#1] (1) [perdir /srv/www/mysite.com/] pass through
/srv/www/mysite.com/down.php
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b879d098/initial] (3) [perdir /srv/www/mysite.com/login/] strip per-dir
prefix: /srv/www/mysite.com/login/js/ajax_login.js -> js/ajax_login.js
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b879d098/initial] (3) [perdir /srv/www/mysite.com/login/] applying pattern
'^([a-z0-9]+/?){0,3}$' to uri 'js/ajax_login.js'
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b879d098/initial] (1) [perdir /srv/www/mysite.com/login/] pass through
/srv/www/mysite.com/login/js/ajax_login.js
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8796080/initial] (3) [perdir /srv/www/mysite.com/login/] strip per-dir
prefix: /srv/www/mysite.com/login/images/ajax_busy.gif -> images/ajax_busy.gif
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8796080/initial] (3) [perdir /srv/www/mysite.com/login/] applying pattern
'^([a-z0-9]+/?){0,3}$' to uri 'images/ajax_busy.gif'
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8796080/initial] (1) [perdir /srv/www/mysite.com/login/] pass through
/srv/www/mysite.com/login/images/ajax_busy.gif
12.345.678.90 - [mysite.com/sid#b85a5dc8][rid#b8796080/initial] (1) [perdir /srv/www/mysite.com/about/] pass through
/srv/www/mysite.com/about/images/edit.png
Как видите, страница about / index.php содержит файл css, который находится в / requires. Выше правило IP-адреса применяется к файлу css, и он перенаправляется. Правило ip-адреса пропускается, если я помещаю файл .htaccess в / requires только со строкой:
RewriteEngine on
Сделайте это во всех подпапках .htaccess.
RewriteEngine On
RewriteOptions Inherit
Узнать больше: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteOptions
почему бы не выполнить проверку ip с помощью php?
может выглядеть что-то. как это
< ?php if($_SERVER['REMOTE_ADRR'] != '66.777.888.99') exit; ? >