Apache 什么';通过.htaccess重写规则有什么问题?(为什么需要重写基础?)

Apache 什么';通过.htaccess重写规则有什么问题?(为什么需要重写基础?),apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,不起作用,但是 rewriteengine on rewriterule ^/a/b$ ^/c$ 有效。您使用的是什么版本的Apache重写库在从根目录进行重写时不应该是必需的。如果你不是,你可能需要它。例如,我的一个博客的当前配置(Apache 2.2)的一部分如下所示,并且可以正常工作: rewriteengine on rewritebase / rewriterule ^a/b$ ^c$ 使规则起作用的可能不是重写基,而是前导斜杠。另外,RewriteRule的第二个参数不是正则表达

不起作用,但是

rewriteengine on
rewriterule ^/a/b$ ^/c$

有效。

您使用的是什么版本的Apache<代码>重写库在从根目录进行重写时不应该是必需的。如果你不是,你可能需要它。例如,我的一个博客的当前配置(Apache 2.2)的一部分如下所示,并且可以正常工作:

rewriteengine on
rewritebase /
rewriterule ^a/b$ ^c$

使规则起作用的可能不是重写基,而是前导斜杠。另外,RewriteRule的第二个参数不是正则表达式。相反,请尝试:

RewriteEngine On    
RewriteRule ^/$ /blog/ [R]
RewriteRule ^/wordpress/(.*) /blog/$1 [R]
当应用.htaccess中的重写规则时,将从URL中删除前导斜杠,如果包含该斜杠,将导致模式失败。通过使用“^/?”启动模式,它将在主配置文件和每个目录配置文件中工作

有关重写引擎如何工作以及RewriteBase的重要性的详细信息,请阅读

编辑:
如和的文档中所述,在评估每目录重写规则时,URL已被转换为路径。重写引擎不再使用URL。相反,它删除了本地目录前缀(保存.htaccess文件的目录),该前缀以斜杠结尾。例如,假设访问者请求“/var/www/foo/bar/baz.html”,并且“/var/www/foo/.htaccess”中设置了重写规则。在每个规则之前,重写引擎将去掉“/var/www/foo/”,留下“bar/baz.html”与重写规则进行匹配。处理规则后,将在本地目录前缀前面加上前缀(除非替换以“http://”开头)。处理完所有重写规则后,如果设置了重写基,则替换本地目录前缀;否则,将剥离文档根目录。然后将重写的URL作为子请求重新注入。

@unknown——这是一个好问题。如果这里没有人咬你,你可以试着把它移到serverfault.com。我还鼓励您接受更多问题的答案,甚至可能在回答过程中回答一些问题……您能否详细说明为什么在应用
.htaccess
时删除了前导斜杠?
RewriteRule ^/?a/b$ c