Назад | Перейти на главную страницу

Использование mod_rewrite для закрытия веб-сайта

Я пытаюсь закрыть веб-сайт для всех, кроме моего 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; ? >