Mod rewrite 替换重写规则中的字符

Mod rewrite 替换重写规则中的字符,mod-rewrite,Mod Rewrite,以下是我目前的规则: RewriteCond %{QUERY_STRING} ^to=(one|seventeen|thirty\+four) RewriteRule ^/folder/page.php$ http://www.site.com/folder/category/%1? [L] RewriteRule ^folder/category/(.+)\+(.+)$ http://www.site.com/folder/category/$1-$2 [L] 第一条规则很好用,如果单词在

以下是我目前的规则:

RewriteCond %{QUERY_STRING} ^to=(one|seventeen|thirty\+four)
RewriteRule ^/folder/page.php$ http://www.site.com/folder/category/%1?  [L]
RewriteRule ^folder/category/(.+)\+(.+)$ http://www.site.com/folder/category/$1-$2 [L]
第一条规则很好用,如果单词在查询字符串中,它会很好地重定向,但是重定向时,我不能让three+four变成three-four


任何帮助都将不胜感激。

对于初学者来说,
RewriteRule^/folder/page.php$
永远不会匹配任何东西。如果规则位于.htaccess文件而不是服务器配置文件中,则URI将删除前缀(前导斜杠)


其次,因为您已经包含了
http://www.site.com/
在您的目标中,这意味着浏览器将被重定向,而不是内部重写。您需要删除
http://www.site.com/
从您的第一条规则中删除,以便应用第二条规则。

以下是有效的方法:

RewriteCond %{QUERY_STRING} ^to=(one|seventeen|thirty\+four)
RewriteRule ^folder/page.php$ folder/category/%1  [NC,QSA,L]
RewriteRule ^folder/category/(.+)\+(.+)$ folder/category/$1-$2 [NC,QSA,L]
现在有三个提示: 1) 在询问以下问题之前,请确保您已经阅读了这里的所有内容:

  • 这是我们的维基
2) 请尝试使用
RewriteLog
指令:它可以帮助您跟踪问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
3) 我最喜欢的检查regexp的工具:

(别忘了选择ereg(POSIX)而不是preg(PCRE)!)


当您想要检查URL并查看其是否有效时,您可以使用此工具。

我们的名如此明智的
用户1088771
在哪里谈到了
.htaccess
文件?我是说。。。也许最好说“如果在
.htaccess
文件中,将永远不会匹配任何东西。但我明白,只给人们“线索”而不做他们的全部工作比我做的更聪明;)我不能用你的名声来追上你,你对我太好了。请多做点“赏金”“=)我假设它在htaccess文件中,因为它被标记,还有相关问题:这不是在htaccess文件中,而是在vhost文件中。这也不起作用,它重定向到:folder/category/three+four?to=three+four