重写除现有文件之外的任何内容

时间:2011-03-05 22:42:02

标签: regex apache mod-rewrite url-rewriting rewrite

我基本上想要将以foo/开头的任何请求重写为foo/index.php?url=。例如,http://localhost/foo/something应该变为http://localhost/foo/index.php?url=something

我目前有这条规则:

RewriteRule ^foo/(\w*) foo/index.php?url=$1

这适用于我的本地主机,但不适用于在线免费托管服务。关键是,它还会重写现有文件......所以我的布局已经消失,以及所有图像等,因为foo/style.css变为foo/index.php?url=style.css。这不会发生在我的本地主机上。

我遇到了类似的问题:mod_rewrite: Redirect if anything but a file,但它实际上没有做任何事情。

那么除了现有文件之外,我该如何重写除此之外的任何内容?为什么它只适用于我自己的localhost?

2 个答案:

答案 0 :(得分:2)

如果这不起作用:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^foo/(\w*) foo/index.php?url=$1

试试这个:

RewriteRule ^foo/(\w*)$ foo/index.php?url=$1

添加了$符号。但这不会重写带有非单词字符的网址(如点{(foo/style.css不会被重写)。

答案 1 :(得分:1)

也许你将扩展名添加到正则表达式?也就是说请求dot不存在?

RewriteRule ^foo/[^.]+ foo/index.php?url=$1

或者我猜您可以将$添加到您自己的

RewriteRule ^foo/(\w*)$ foo/index.php?url=$1

因为foo / style匹配后它可以匹配文件(你不需要下一个char作为URL的结尾)

怎么回事?