我有.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]
答案 0 :(得分:1)
在重写规则之前,如果它不是文件或目录,则应添加条件
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
答案 1 :(得分:1)
您的RewriteRule
在网址末尾缺少一个锚点,因此部分匹配仍会被重写。像这样添加$
:
RewriteRule ^play/([^/.]+)$ index.php?task=view&name=$1 [L]
Shahaf的回答也可能对你有帮助(虽然这意味着文件系统每次请求都会被轮询两次,这会影响性能),但是上面你说的是#34;只匹配播放/除了跟随它的点或正斜杠"这似乎是你的意思。没有美元,它可以在它之后有任何东西并且仍然匹配,正如你所发现的那样。
我还删除了在字符类中不必要的点的转义。