Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Silex htaccess正则表达式阻止除一个以外的所有页面_Regex_Apache_.htaccess_Silex - Fatal编程技术网

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

Regex Silex htaccess正则表达式阻止除一个以外的所有页面,regex,apache,.htaccess,silex,Regex,Apache,.htaccess,Silex,我正在努力实现的目标: example.com/payment-可以从任何地方访问。 而其他一切只能从特定的ip访问 我正在使用Silex2和Apache2.4。如果您不知道,silex使用控制器和路由,因此在本例中没有direct.php文件(payment.php) 这是我的.htaccess文件: <IfModule mod_rewrite.c> ##Allow profiler to be accessed from office only RewriteCond %{REM

我正在努力实现的目标:

example.com/payment-可以从任何地方访问。 而其他一切只能从特定的ip访问

我正在使用Silex2和Apache2.4。如果您不知道,silex使用控制器和路由,因此在本例中没有direct.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>

##仅允许从office访问探查器
重写cond%{REMOTE_ADDR}^11\.111\.111\.111
重写规则^(.*)\u探查器(.*)$https://www.example.com [R=301,L]
选项-多视图
重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[QSA,L]
重写规则。*-[E=环境:产品]
重写cond%{SERVER_NAME}^stage。
重写规则。*-[E=环境:阶段]
RewriteCond%{SERVER_NAME}.dev$[或]
重写规则。*-[E=ENVIRONMENT:dev]
###刺激###
##强制www和https
重写cond%{ENV:ENVIRONMENT}prod
重写cond%{HTTPS}关闭[或]
重写cond%{HTTP_HOST}^www\.example\.com$[NC]
重写规则^(.*)$https://www.example.com/$1[L,R=301]
###舞台###
##强制https
重写cond%{ENV:ENVIRONMENT}阶段
重写cond%{HTTPS}关闭[或]
重写cond%{HTTP_HOST}^stage\.example\.com$[NC]
重写规则^(.*)$https://stage.example.com/$1[L,R=301]
##拒绝访问
重写cond%{ENV:ENVIRONMENT}阶段
重写cond%{REMOTE_ADDR}^11\.111\.111\.111
重写规则^((?!付款)。*)*$https://stage.example.com [R=403,L]
###发展###
最重要的部分是最后几行,其中带有stage的##deny access

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


祝你今天愉快!:)

你只想把最后一部分修好,我说得对吗?
##拒绝访问
行?如果没有,我将扩展我的答案以满足需要;)

如果需要将
/payment
重写到
stage.example.com
添加此

##allow access to /payment
RewriteCond %{ENV:ENVIRONMENT} stage
RewriteRule ^/payment$ https://stage.example.com [R=301,L]

我来这里是为了regex标签,不知道其他的。你能详细说明你想要达到的目标吗?例如,用散文描述正则表达式应该匹配/不匹配的内容。您能给出应该匹配和不应该匹配的示例输入吗?对于我们这些知道正则表达式但不知道其他标记的人来说,需要什么样的正则表达式;或者给出工作正则表达式的规范/示例。同时描述一下你的实验失败的方式。谢谢你这么快的回答。我认为正则表达式很好-
^((?!payment)。*$
如果url包含单词“payment”(例如example.com/payment),那么它应该不匹配。这就是它的作用。所以我认为问题不在这里。可能在重写规则部分。
^((?!payment)。*$
非常昂贵,所以请尝试
^付款$
。2由于它更改为
/index.php
,因此很可能永远无法获得
/payment
。所以最好用
RewriteCond%{THE_REQUEST}检查
%{THE_REQUEST}
\h/付款
\n
重写规则^https://stage.example.com [R=403,L]
是的,重写条件与请求一起工作,非常感谢!但是我不明白\h部分是什么意思,这不是刚刚转义的“h”字符吗?这是干什么用的?还有,
^付款$
与任何内容都不匹配。\n表示新行,因为此处的注释不是多行的<代码>\h在regexp中表示水平空格符号。
##allow access to /payment
RewriteCond %{ENV:ENVIRONMENT} stage
RewriteRule ^/payment$ https://stage.example.com [R=301,L]