Htaccess访问指定文件

时间:2017-05-04 04:28:39

标签: apache .htaccess mod-rewrite

我有.htaccess个文件:

DirectoryIndex index.php
RewriteEngine on
RewriteRule ^play/([^/\.]+) index.php?task=view&name=$1 [L]

显示页面游戏。

我的问题:当我需要使用路径/play/Assest/file-name.swf加载某个文件(或通过地址栏访问)时。这返回404错误。

我如何访问文件,但不要更改上面的RewriteRule

我尝试重定向代码,但它无效:

RewriteRule ^/play/Assets/file-name.swf ^/games/Assets/file-name.swf [R=301,L]

2 个答案:

答案 0 :(得分:1)

在重写规则之前,如果它不是文件或目录,则应添加条件

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

答案 1 :(得分:1)

您的RewriteRule在网址末尾缺少一个锚点,因此部分匹配仍会被重写。像这样添加$

RewriteRule ^play/([^/.]+)$ index.php?task=view&name=$1 [L]

Shahaf的回答也可能对你有帮助(虽然这意味着文件系统每次请求都会被轮询两次,这会影响性能),但是上面你说的是#34;只匹配播放/除了跟随它的点或正斜杠"这似乎是你的意思。没有美元,它可以在它之后有任何东西并且仍然匹配,正如你所发现的那样。

我还删除了在字符类中不必要的点的转义。