Silex htaccess正则表达式阻止除一个页面之外的所有页面

时间:2017-03-31 14:01:21

标签: regex apache .htaccess silex

我想要实现的目标:

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>

重要的部分是舞台上 ##拒绝访问的最后几行。

过去几个小时我一直在拔头发,我似乎无法让它发挥作用。如果有人能帮助我,我真的很感激。

祝你有愉快的一天! :)

1 个答案:

答案 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]