我遇到了RewriteRules的问题。
我目前正在使用此规则:
RewriteRule ^([^/.]+)/?$ index.php?clip=$1
这适用于链接,因为$_GET['clip']
是斜杠之后的值:
但不适合那些有点字符的人,比如:
http://example.com/abcdefg.png
我应该如何更改RewriteRule以使其适用于此类链接?
答案 0 :(得分:1)
试试这段代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?clip=$1
这可以防止它忽略服务器上真正存在的文件。只要http://example.com/abcdefg.png
存在,/abcdefg.png
就可以了。
您在重写规则中使用的正则表达式也需要稍微更改一下,我删除了.
,因为您正在阻止它。
答案 1 :(得分:1)
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]
答案 2 :(得分:0)
您匹配任何不包含“/”或“。”的字符串。如果您希望匹配包含扩展名,可以使用:
RewriteRule ^([^/]+)/?$
如果你不关心它:
RewriteRule ^([^/.]+)