限制重写规则以排除某个目录

时间:2010-09-13 05:48:14

标签: .htaccess mod-rewrite url

当重写规则允许我们使用ID号制作友好的URL时。故事只是通过身份证号码,所以最后的文字并不重要。

RewriteRule ^news/([0-9]+)$    /news/$1/ [R=301,L]
RewriteRule ^news/([a-zA-Z0-9_-]+)/.*$ /news/story.php?id=$1

我们的问题出现在/ news / images /中链接的任何文件时,它也会被重定向。因此,显示/ news / images /中的图像的任何内容都不起作用。

有人可以帮帮我吗?我们如何限制重写,以便它说“如果它在/ images /子目录中,不要重写路径”?

1 个答案:

答案 0 :(得分:1)

如果文件存在,您可以采用简单的路线并避免重写:

RewriteRule ^news/([0-9]+)$    /news/$1/ [R=301,L]

# Ignore the RewriteRule if the request points to a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !=tags [NC]
RewriteRule ^news/([a-zA-Z0-9_-]+)/.*$ /news/story.php?id=$1

或者,如果您想在资源请求未指向真实文件的情况下进行目录检查,但应直接生成404响应,则可以尝试以下操作:

RewriteRule ^news/([0-9]+)$    /news/$1/ [R=301,L]

# Check if the path segment after /news/ corresponds to an existing directory
# and if so, don't perform the rewrite
RewriteRule %{DOCUMENT_ROOT}/news/$1/ !-d
RewriteCond $1 !=tags [NC]
RewriteRule ^news/([a-zA-Z0-9_-]+)/.*$ /news/story.php?id=$1