2013-04-23 89 views
0

建立在这个问题上:.htaccess redirect if folder name in url我想知道如何在CakePHP应用程序的webroot的.htaccess中应用那里认为的.htaccess规则。 而不会生成服务器错误或缺少CakePHP重写功能。.htaccess重定向如果CakePHP的URL中的文件夹名称

我的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 

我需要这个,因为这个应用软件与MP3音乐文件的子文件夹的音频文件夹该应用程序使用播放它们。我希望有人试图直接访问mp3文件或从外部网站访问一个mp3文件重定向到另一个页面,但保持能够从我的网站页面播放该文件。因此,假设如下:

http://mycake.com/audio/folderX/fileY.mp3 我想http://mycake.com/audio/ *任何访问重定向到http://mycake.com/mistakeSound.mp3

回答

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 

当有人试图访问通过任何MP3文件,例如,http://mycake.com/audio/folderX/fileY.mp3。将会产生一个401错误。

但是,我注意到FDM能够访问和下载此文件。重定向仅适用于Web浏览器。

1

htaccess文件的规则的顺序是非常重要的,如果规则和条件适用于同一请求。如果请求URL由不同的规则处理,您可以按任何顺序放置规则。

在你的情况,你在这里有真正的文件in the other question和不存在的文件和目录,在这个问题上

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

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