Mod-Rewrite
使用 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
第二種方式也會導致圖像和文件失去,因為 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。