htaccess:保护手动重写URL地址

时间:2015-11-02 01:20:08

标签: php apache .htaccess mod-rewrite

是否可以保护单个网站网址多个免遭手动更改?

示例:

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

www.example.com/here-is-example - 错误的网址(手动更改) 或

www.example.com/here-is- - 错误的网址(手动更改) 或

www.example.com/here-is-example-2 - 错误的网址(手动更改)

目前,我使用最后的 RewriteRule 将这些已更改的地址重定向到主页,但我宁愿看到一些解决方案来检测手动更改网址并阻止此类访问者访问。

RewriteRule 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]

如果某些RewriteRule无法解决此问题,是否可以将此类行为重定向到500拒绝访问?

1 个答案:

答案 0 :(得分: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

请注意,因为由于剪切和粘贴错误或故意探测您的网站而无法知道某人是否有错误的网址。

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