我想要实现的目标:
example.com/payment - 可以从任何地方访问。 其他一切只能从某些IP访问。
我正在使用silex 2和apache 2.4。如果你不知道,silex使用控制器和路由,所以没有直接的.php文件,在这种情况下(payment.php)
这是我的.htaccess文件:
<IfModule mod_rewrite.c>
##Allow profiler to be accessed from office only
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteRule ^(.*)_profiler(.*)$ https://www.example.com [R=301,L]
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
RewriteRule .* - [E=ENVIRONMENT:prod]
RewriteCond %{SERVER_NAME} ^stage.
RewriteRule .* - [E=ENVIRONMENT:stage]
RewriteCond %{SERVER_NAME} .dev$ [OR]
RewriteRule .* - [E=ENVIRONMENT:dev]
### PROD ###
##force www and https
RewriteCond %{ENV:ENVIRONMENT} prod
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
### STAGE ###
##force https
RewriteCond %{ENV:ENVIRONMENT} stage
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^stage\.example\.com$ [NC]
RewriteRule ^(.*)$ https://stage.example.com/$1 [L,R=301]
##deny access
RewriteCond %{ENV:ENVIRONMENT} stage
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteRule ^((?!payment).)*$ https://stage.example.com [R=403,L]
### DEV ###
</IfModule>
重要的部分是舞台上 ##拒绝访问的最后几行。
过去几个小时我一直在拔头发,我似乎无法让它发挥作用。如果有人能帮助我,我真的很感激。
祝你有愉快的一天! :)
答案 0 :(得分:0)
我是对的,你只想要修复你的最后一部分吗? ##deny access
行?如果没有,我会将答案扩展到所需的内容;)
##deny access for everything but /payment from IP != 11.111.111.111
RewriteCond %{ENV:ENVIRONMENT} stage
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteRule !^/payment$ - [F]
如果您需要将/payment
重写为stage.example.com
,请添加此
##allow access to /payment
RewriteCond %{ENV:ENVIRONMENT} stage
RewriteRule ^/payment$ https://stage.example.com [R=301,L]