我基本上想要将以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?
答案 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的结尾)
怎么回事?