【问题标题】:.htaccess redirect if a folder name in url of CakePHP如果 CakePHP 的 url 中的文件夹名称,.htaccess 重定向
【发布时间】:2013-04-16 20:59:49
【问题描述】:

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

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

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

【问题讨论】:

    标签: soundmanager2 soundmanager2 .htaccess cakephp mod-rewrite cakephp-1.2


    【解决方案1】:

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

    在你的情况下,你在这个问题中有真实文件in the other question 和不存在的文件和目录

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

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

    【讨论】:

      【解决方案2】:

      我找到了解决方案,该解决方案取决于将 .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 能够访问和下载此文件。重定向仅适用于网络浏览器。

      【讨论】:

        猜你喜欢
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多