二通りやり方があって、一つは.htaccessでURLの#以降もCakePHPに制御させない方法と、javascriptで対応する方法。
今回はjavascript(jQuery)で対応してみました。
javascriptで実現する方法
遷移先のVIEWに下記を記述するだけです。
<script type="text/javascript"> $(document).ready(function () { if (location.hash) { y = $("*[name="+location.hash.slice(1)+"]").offset().top; scrollTo(0,y); } }) </script>
location.hashで#xxパラメーターを取得して、それを使ってname属性でフィルターしたオブジェクトのoffsetを取得します。
あとは、そこまでスクロースする処理を行えば疑似的に内部リンクが有効になります。
.htaccessで実現する方法
.htaccessに下記を記述すると実現できるようです。(未検証)
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)(#*.*)$ index.php?url=$1$2 [QSA,L] </IfModule>