2011-03-05 97 views
0

我基本上想要重写任何以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,但实际上并没有做任何事情。

那么我会如何去重写除现有文件之外的任何东西?为什么它只能在我自己的本地主机上运行?

回答

2

如果这不起作用:

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

试试这个:

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

添加了$迹象。但是这并不会重写像非点字符这样的非URL字符的URL(因此foo/style.css将不会被重写)。

+0

我的主机现在说我的磁盘使用已满,但它显然不是......我想我只是移动到另一个主机,这只是糟透了。你的建议仍然适用于我的本地主机,所以如果我碰巧找到一个可用的免费主机,我会使用它。谢谢。 – pimvdb 2011-03-06 10:18:10

1

也许如果你添加扩展到正则表达式?这就是说要求dot不存在?

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

或者,我想你可以在$添加到自己的

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

因为别人能匹配,因为富/风格相匹配的文件(你并不需要下一个字符是URL的结束)

这是怎么回事?

相关问题