Mod rewrite 将URL重写为HTML文件导致重写为.HTML/

Mod rewrite 将URL重写为HTML文件导致重写为.HTML/,mod-rewrite,url-rewriting,apache2,Mod Rewrite,Url Rewriting,Apache2,我目前正在对我的博客网站进行彻底的改造,并找到了一种方法将我当前的所有页面转换为静态html页面。他们目前正在使用友好的url,该url会重新映射到一个附加了GET参数的central index.php页面 我试图做的改变是将这些友好的URL映射到它们的html对应项。我目前正在使用此规则: RewriteRule ^archives?/([^/]+)/([^/.]+)/?$ archives/$1/$2.html 错误日志报告它找不到blah.html/,这意味着它正在查找.html目录,

我目前正在对我的博客网站进行彻底的改造,并找到了一种方法将我当前的所有页面转换为静态html页面。他们目前正在使用友好的url,该url会重新映射到一个附加了GET参数的central index.php页面

我试图做的改变是将这些友好的URL映射到它们的html对应项。我目前正在使用此规则:

RewriteRule ^archives?/([^/]+)/([^/.]+)/?$ archives/$1/$2.html
错误日志报告它找不到
blah.html/
,这意味着它正在查找.html目录,而不是.html文件。因此,一个更好的例子是:

/archives/2009/original-name
应该映射到

/archives/2009/original-name.html
但它真的被映射到了

/archives/2009/original-name.html/

我在这里遗漏了什么?

你不需要反过来使用它吗?我没有测试代码,但应该是这样的:

RewriteRule ^archives/(.*)/(.*).html archives/$1/$2

我看不出你的正则表达式有什么明显的问题


我猜你可能有一条规则遵循这条规则,那就是将任何没有尾随斜杠的东西重定向到与斜杠等价的位置(这是避免重复内容问题的常见方法)。

你在第二条语句中没有逃过句号。试试这个

RewriteRule ^archives?/([^/]+)/([^/\.]+)/?$ archives/$1/$2.html

/archives/2009/original name.html
是一个现有文件还是什么?是的,/archives/2009/original-name.html存在。不,他正在将友好的无扩展URL映射到html文件,而不是反过来。我也同意这个猜测。大多数框架已经包含了重写规则,可以在URL上附加斜杠,例如处理参数,这样“URL/id/1/”将被重写为“URL/page.php?id=1”。因此,无论您使用的是什么框架/软件/产品,都可能会干扰您的重写规则。他使用的是Apache mod_Rewrite。同样,仍然在查找目录而不是文件,那么您可能需要重新陈述您的问题。没人听清楚你在说什么。上面的示例正确转义了控制字符。你有一些奇怪的“?”的位置,你已经解释过了。比如为什么“档案”末尾的“s”是可选的,这是故意的吗?