htaccess переписать на страницу обслуживания, если существует, а не IP, иначе начальная загрузка - PullRequest
4 голосов
/ 23 марта 2012

Как бы я переписал все запросы на maintenance.php, если он существует, кроме изображений и кроме белого списка IP-адресов.

Если maintenance.php не существует, его следует переписать в загрузочную систему (index.php) если запрошенный файл не существует.

Если maintenance.php существует, а IP-адрес находится в белом списке, то его следует перезаписать в загрузочный файл (index.php), если запрошенный файл не существует.

Я пробовал много вариантов следующего:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
    RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|gif)$
    RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
    RewriteCond %{REMOTE_ADDR} !^111\.111\.111\.111$
    RewriteRule . maintenance.php [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php
</IfModule>

Ответы [ 3 ]

3 голосов
/ 24 марта 2012

Это то, что я в итоге использовал

Надеюсь, это поможет любым будущим посетителям:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/maintenance.php !-f [OR]
    RewriteCond %{HTTP:X-Forwarded-For} ^(x\.x\.x\.x|y\.y\.y\.y|z\.z\.z\.z)$ [OR]
    RewriteRule . index.php [L]

    RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
    RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|gif)$
    RewriteCond %{HTTP:X-Forwarded-For} !^(x\.x\.x\.x|y\.y\.y\.y|z\.z\.z\.z)$
    RewriteRule . maintenance.php [L]
</IfModule>

Также @ircmaxell получает галочку, потому что он помог мне прийти к этому решению.

3 голосов
/ 23 марта 2012

Я бы сделал это наоборот. Перепишите на загрузочную версию, если страница обслуживания не существует или IP-адрес действителен.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/maintenance.php !-f [OR]
RewriteCond %{REMOTE_ADDR} ^123\.123\.123\.123$ [OR]
RewriteCond %{REMOTE_ADDR} ^111\.111\.111\.111$
RewriteRule . index.php [L]

RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|gif)$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$ [OR]
RewriteCond %{REMOTE_ADDR} !^111\.111\.111\.111$
RewriteRule . maintenance.php [L]

Итак, в основном он будет запускать index.php IF:

(Not a file) 
&& (Not a dir) 
&& (
    (Maintenance Doesn't Exist) 
    || (Remote Addr == 123.123.123.123)
    || (Remote Addr == 111.111.111)
)

Мы могли бы расширить это, используя логику высказываний, но зачем ...

1 голос
/ 23 марта 2012

Попробуйте заключить свои IP-адреса в квадратные скобки в том же RewriteCond:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
    RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|gif)$
    RewriteCond %{REMOTE_ADDR} !^(123\.123\.123\.123|111\.111\.111\.111)$
    RewriteRule . maintenance.php [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php
</IfModule>
...