htaccess RewriteRule问题

时间:2010-08-07 14:03:42

标签: php apache .htaccess mod-rewrite

我遇到了RewriteRules的问题。

我目前正在使用此规则:

RewriteRule ^([^/.]+)/?$ index.php?clip=$1

这适用于链接,因为$_GET['clip']是斜杠之后的值:

http://example.com/abcdefg

但不适合那些有点字符的人,比如:

http://example.com/abcdefg.png

我应该如何更改RewriteRule以使其适用于此类链接?

3 个答案:

答案 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 ^([^/.]+)