.htaccess mod_rewrite - 阻止symfony登录"/(admin|login)"



我想只允许从某些IP地址(两个192.168.0.1和10.10.10.1)访问/admin和/login。我在这里已经学会了必须使用类似RewriteCond %{REMOTE_ADDR} !^192.168..*$的东西,但在我的示例中如何更精确地做到这一点?

我使用Symfony2,在我的/www文件夹中有一个非常基本的htaccess文件。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} calculator.ipsum.de$
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !index
    RewriteCond %{REQUEST_URI} !.
    RewriteRule (.*) index.php [L]
</IfModule>

您可以尝试:

RewriteCond %{REMOTE_ADDR} !^192.168.0.1$ [OR]
RewriteCond %{REMOTE_ADDR} !^10.10.10.1$
RewriteRule (admin|login)/?$ - [F]

对于从条件中的IP以外的IP访问该页面的尝试,这应该给出403-Forbidden。

您可以使用Symfony的访问控制。因此,在您的app/config/security.yml中,添加:

security:
    access_control:
        - { path: ^/admin, roles: ROLE_USER_IP, ips: [192.168.0.1, 10.10.10.1] }
        - { path: ^/login, roles: ROLE_USER_IP, ips: [192.168.0.1, 10.10.10.1] }

这应该允许192.168.0.110.10.10.1访问页面,同时阻止其他任何内容。

或者,如果你想在服务器上而不是在应用程序中这样做,你可以使用Apache的mod_access模块,而不是重写:

<Location "/admin">
    Order deny,allow
    Allow from 192.168.0.1 10.10.10.1
    Deny from All
</Location>
<Location "/login">
    Order deny,allow
    Allow from 192.168.0.1 10.10.10.1
    Deny from All
</Location>

最新更新