htaccess重写规则问题
问题描述:
我有一个RewriteRules的问题。htaccess重写规则问题
我目前使用这个规则:
RewriteRule ^([^/.]+)/?$ index.php?clip=$1
这工作正常的链接,因为这些,其中$_GET['clip']
是斜杠后的值:
但不适合那些有一个点字符,如下所示:
http://example.com/abcdefg.png
我应该如何更改RewriteRule以使其适用于此类链接?
答
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?clip=$1
我不会建议这种技术,因为它会导致一个额外的磁盘读取,以检查该文件是否存在... 如果有我会建议组织的方式你的目录结构的可能性, Apache可以从目录中知道该做什么。从我的框架中的例子:
# skip whitelisted directories
RewriteRule ^(test|skin|stylesheets|images|javascripts|favicon|robots\.txt|index\.php) - [L]
RewriteRule ([-_\w\/]*) index.php?p=$1 [NE,NC,QSA]
答
您匹配任何不包含“/”或“。”的字符串。如果你想比赛进行到包括扩展,可以使用:
RewriteRule ^([^/]+)/?$
如果你不关心它:
RewriteRule ^([^/.]+)
答
试试这个代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?clip=$1
这将防止它忽略服务器上真正存在的文件。所以http://example.com/abcdefg.png
将工作,只要/abcdefg.png
存在。
此外,您在重写规则中使用的正则表达式需要稍微更改,我删除了.
,因为您正在阻止它。
+0
阅读评论我添加到nhnb。谢谢! :) – Codecat 2010-08-07 14:13:23
这与jordanstephens答案一起使完美。谢谢! – Codecat 2010-08-07 14:12:52