Mod-Rewrite

使用 Apache mod_rewrite 阻止對隨機 url 路徑的訪問

  • February 27, 2019

這是我的網站手冊的連結:

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

第二種方式也會導致圖像和文件失去,因為 URL 不是一個已知的路徑。如何阻止或重定向 URL 中添加的那些隨機路徑/manual/file.xhtml

我的虛擬主機配置中的唯一規則是:

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

這些 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。

引用自:https://serverfault.com/questions/955946