需要重写任何字符(@#%^& *!/)

时间:2009-10-23 20:10:32

标签: mod-rewrite

RewriteRule ^[^/.]*$ new/$0

每当我输入mydomain.com/somepath/to/somewhere时,它都会抛出404

它应该转换为:mydomain.com/new/somepath/to/somewhere

2 个答案:

答案 0 :(得分:1)

是否需要前导斜杠取决于您是在httpd.conf文件中还是在.htaccess中或httpd.conf中的容器中执行此操作。

为避免重写循环,您需要使用RewriteCond来确保您不匹配new /

不确定$ 0语法是否有效而没有捕获括号?

答案 1 :(得分:0)

让我们快速解析你的规则:

在开始时锚定,匹配任何不是/不是任何字符的内容,0或更多次,最后锚定。

换句话说,它永远不会匹配任何东西,因为.匹配任何东西(因此[^.]与任何东西都不匹配。) < / p>

我认为你的意思是:

RewriteCond %{REQUEST_URI} !^/?new/
RewriteRule ^/?(.+)$ new/$1 [L]

这是读 在开始时锚定,匹配0或1 /,后跟任意一个或多个字符(稍后保存此匹配),最后锚定。

(根据Devin Ceartas的回答,RewriteCond会阻止重写/ new /目录中的内容。[L]会阻止任何进一步的重定向)