apache 无法设置适当的重写?

qqrboqgw  于 2023-01-17  发布在  Apache
关注(0)|答案(2)|浏览(88)

我想通过重写IBM WebSphere WCM来阻止访问:

/wps/wcm/webinterface/login/login.jsp

并允许访问下面的所有内容

/wps/*

有办法吗?我试过了:

RewriteCond %{REQUEST_URI} ^/wps/wcm/webinterface/login/login\.jsp [OR,NC]
RewriteCond %{REQUEST_URI} !^/wps.*
RewriteRule ^/.* https://myhost.com/wps/portal [L,R=permanent]
nhaq1z21

nhaq1z211#

我用下面的代码让它工作起来(这里是我重写的一小段)

RewriteCond %{HTTPS} off
RewriteRule ^/.* https://%{HTTP_HOST}/wps/portal [L,R=permanent]

RewriteCond %{REQUEST_URI} ^/wps/wcm/webinterface.*
RewriteRule ^/,* https://%{HTTP_HOST}/wps/portal [L,R=permanent]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} .*(jsp|jsv|wml|chtml) [OR,NC]
RewriteCond %{REQUEST_URI} !^.*(htm|html|js|pdf|swf|ico|gif|jpg|css|png) [NC]
...
RewriteRule ^/,* https://%{HTTP_HOST}/wps/portal [L,R=permanent]

谢谢大家!

2ul0zpep

2ul0zpep2#

请尝试以下操作(此处不需要使用mod_rewrite):

<If "%{REQUEST_URI} == '/wps/wcm/webinterface/login/login.jsp'">
    Require all denied
</If>

这为所述的特定URL提供了403禁止。
(需要Apache 2.4)
使用mod_rewrite:

RewriteCond %{REQUEST_URI} ^/wps/wcm/webinterface/login/login\.jsp [OR,NC]
RewriteCond %{REQUEST_URI} !^/wps.*
RewriteRule ^/.* https://myhost.com/wps/portal [L,R=permanent]

.htaccess上下文中,RewriteRulepattern 匹配的URL路径不以斜杠开头,因此 pattern^/.*永远不会匹配(因此请求永远不会被“阻止”)。但是,如果在服务器或虚拟主机上下文中直接使用规则,则需要斜杠前缀。
因为你只想阻止一个特定的URL,你不需要检查它是 * 不是 * 其他的东西(即不以/wps开头)。但是OR'ing这两个条件没有意义(根据你的标准),因为它会阻止指定的URL * 和 * 每一个其他的不以/wps开头的URL。
这也会发出一个301重定向,它不会专门“阻止”请求。
要仅阻止该URL,您需要类似以下内容:

RewriteRule ^/?wps/wcm/webinterface/login/login\.jsp - [F]

相关问题