基于这个问题:.htaccess redirect if folder name in url我想知道如何在CakePHP应用程序的webroot的.htaccess中应用那里所考虑的.htaccess规则。 没有生成服务器错误或缺少CakePHP重写功能。
我的CakePHP版本是1.2.10 ,webroot的.htaccess如下:
#app/webroot/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
AddType audio/mpeg mp3
我需要这个,因为应用程序有一个音频文件夹,其中包含应用程序使用soundmanager2播放的mp3文件的子文件夹。我想当有人尝试直接访问mp3文件或从外部网站重定向到另一个页面,但保持soundmanager2能够从我的网站页面播放该文件。所以假设如下:
http://mycake.com/audio/folderX/fileY.mp3 我希望对http://mycake.com/audio/ *的任何访问权限都重定向到http://mycake.com/mistakeSound.mp3
答案 0 :(得分:1)
如果规则和条件适用于相同的请求,则在htaccess文件中,规则的顺序很重要。如果请求URL由不同的规则处理,您可以按任何顺序放置规则。
在您的情况下,此问题中包含真实文件in the other question和不存在的文件和目录
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
这意味着,您可以在CakePHP规则之前或之后插入其他规则。
答案 1 :(得分:0)
我找到的解决方案取决于将.htaccess文件放在所考虑的 audio 文件夹中。 .htaccess的语法应该如下:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mycake\.com [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mycake\.com.*$ [NC]
RewriteRule \.(gif|jpg|mp3)$ - [R=401]
ErrorDocument 401 /e401.html
当有人试图通过http://mycake.com/audio/folderX/fileY.mp3访问任何mp3文件时。将生成401错误。
但是,我注意到FDM能够访问和下载此文件。重定向仅适用于Web浏览器。