mod_rewrite重定向规则变量问题

时间:2009-09-12 04:20:55

标签: .htaccess mod-rewrite

我有点像.htaccess n00b,并且在我的生活中不能得到正则表达式的句柄。

我有以下RewriteRule代码可以正常工作:

RewriteRule ^logo/?$ /pages/logo.html

基本上,它需要/pages/logo.html并使其成为/logo

有没有办法让我用变量来概括代码,这样它就能自动运行,而不必为每个页面都有一个独立的行?

我知道$1可以作为变量工作,但这通常用于查询,而我无法在此实例中使用它。

2 个答案:

答案 0 :(得分:1)

试试这个:

RewriteRule ^/pages/(.*)\.html$ /$1

(.*)匹配pages/.html之间的任何内容。在$1中使用了它匹配的内容。因此,/pages/logo.html变为/logo/pages/subdir/other_page.html变为/subdir/other_page

答案 1 :(得分:1)

首先,您需要知道mod_rewrite只能处理对服务器的请求。因此,您需要请求/logo将其重写为/pages/logo.html。这就是规则的作用,它将URL路径/logo内部的请求重写为/pages/logo.html,而不是相反。

如果您现在想要使用匹配字符串的某些部分,则需要使用组对它们进行分组(( expr ))可以参考$ n 。在您的情况下,模式[^/]将适用于描述斜杠/以外的任何字符:

RewriteRule ^([^/]+)$ /pages/$1.html