0

基于这个问题:.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

我需要这个,因为应用程序有一个音频文件夹,其中包含带有 mp3s 文件的子文件夹,应用程序使用播放它们。我希望有人尝试直接或从外部网站访问 mp3 文件时重定向到另一个页面,但保持能够从我的网站页面播放文件。所以假设如下:

http://mycake.com/audio/folderX/fileY.mp3我希望对http://mycake.com/audio/ * 的 任何访问都被重定向到http://mycake.com/mistakeSound.mp3

4

2 回答 2

1

htaccess文件中,如果规则和条件适用于相同的请求,则规则的顺序很重要。如果请求 URL 由不同的规则处理,您可以按任意顺序排列规则。

在您的情况下,您在另一个问题中有真实文件,在这个问题中有不存在的文件和目录

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

这意味着,您可以在 CakePHP 规则之前或之后插入其他规则。

于 2013-04-23T15:30:34.817 回答
0

我找到了依赖于将 .htaccess 文件放在相关音频文件夹中的解决方案。该 .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 浏览器。

于 2013-04-27T12:52:02.107 回答