使用 Apache mod_rewrite 阻止随机 URL 路径的访问

使用 Apache mod_rewrite 阻止随机 URL 路径的访问

这是我的网站手册的链接:

https://www.example.com/manual/ch016_user-moves.xhtml

但不幸的是,也可以通过以下方式访问:

https://www.example.com/manual/blablablafoobar/ch016_user-moves.xhtml

或者

https://www.example.com/manual/what-ever-youwanttoputinhere/ch016_user-moves.xhtml

/manual/第二种方法也会导致图像和文件丢失,因为 URL 不是已知路径。我如何阻止或重定向在和之间的 URL 中添加的随机路径file.xhtml

我的 vhost 配置中唯一的规则是:

RewriteEngine on
        RewriteRule ^/manual/(.*).xhtml /manual/index.php/$1 [PT]
        RewriteRule ^/manual/(.*).html /manual/index.php/$1 [PT]
        Alias /manual /home/piatek/chess-manual/

答案1

这些 URL 之所以能够访问,似乎是因为您现有的指令:

RewriteRule ^/manual/(.*).xhtml /manual/index.php/$1 [PT]
RewriteRule ^/manual/(.*).html /manual/index.php/$1 [PT]

具体来说,(.*)比赛任何事物- 换句话说,URL 路径深度不受限制(然后留给您的index.php脚本进行解密 - 大概可以成功解密!)。尝试限制它,([^/]+)以便它只匹配文件名而不是整个 URL 路径。这两个指令也可以合并为一个。

例如,尝试以下命令代替上述两个指令:

RewriteRule ^/manual/([^/]+)\.x?html$ /manual/index.php/$1 [PT]

这可能会导致这些“无效”的 URL 返回 404。

相关内容