2015-11-02 81 views
1

是否可以通过保护单个网站的URL多个被手动更改?htaccess:保护手动重写URL地址

实施例:

www.example.com/here-is-example-url/1234/page/ - 这是正确的URL

www.example.com/here-is-example - 坏URL(手动改变的) 或

www.example.com/here-is- - 坏URL(手动改变的) 或

www.example.com/here-is-example-2 - 不良网址(手动更改)

目前我确实将这些修改后的地址重定向到了主页,最后RewriteRule,但我更愿意看到一些解决方案来检测URL的手动更改并阻止访问这些访问者。

什么重写规则RewriteCond会阻止这?

这里是我到目前为止有:

#redirect to canonical url if no ending slash 
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/page$ $1/$2/page/ [R,L] 
#redirect to canonical url if anything behind slash 
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/page/(.+)$ $1/$2/page/ [R,L] 
#rewrite to PHP file if visiting the canonical url 
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/page/$ page.php?val1=$1&val2=$2 [L] 

#redirect to Homepage url if no other rule match with missing ending slash 
RewriteCond %{REQUEST_URI} !(/$|\.) 
RewriteRule (.*) http://www.domain.com/ [R,L] 

在这种情况下,不能被一些重写规则来解决是有可能这样的行为重定向到500次访问被拒绝?

+0

让我们在这里备份一下。它会使这些URL产生错误的目的是什么? (是否有某些原因可以让你特别*要*告诉这些用户离开?) – duskwuff

+0

@duskwuff我想显示500个访问被拒绝给任何人,如果他们手动修改URL的话。因此,作为最后一个条件和规则,如果缺少结束斜线,用户将重定向到主页 - 如何调整该条件和规则以使其[F,L] - 基于条件拒绝访问而不是重定向到主页? –

回答

0

可以使用˚F orbidden标志

RewriteRule here-is-example$ - [F,L] 

正如你所说,以上规则只抓住了第一个例子。

大多数人不会看到HTTP状态码,您可以使用ErrorDocument来显示自定义错误消息。

ErrorDocument 404 /access-denied.html 

https://httpd.apache.org/docs/2.4/custom-error.html

要小心,因为没有办法知道是否有人有错误的URL由于剪切和粘贴错误或故意试探你的网站。

这不是你应该担心的事情。

+0

那么你的答案只能解决[这里是例子]的情况下,所以没有正确的正则表达式它只会为这个例子,再加上它如何在多个页面上工作(安全的方式)? –