我有点像.htaccess n00b,并且在我的生活中不能得到正则表达式的句柄。
我有以下RewriteRule
代码可以正常工作:
RewriteRule ^logo/?$ /pages/logo.html
基本上,它需要/pages/logo.html
并使其成为/logo
。
有没有办法让我用变量来概括代码,这样它就能自动运行,而不必为每个页面都有一个独立的行?
我知道$1
可以作为变量工作,但这通常用于查询,而我无法在此实例中使用它。
答案 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