2010-02-08 59 views
0

我目前正在对我的博客网站进行大修,并且找到了将我所有当前页面转换为静态html页面的方法。他们目前正在使用友好的网址,将其重新映射到一个带有GET参数的中心index.php页面。重写HTML文件的URL,导致重写为.html/

我试图做的改变是有相同的友好的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/ 

缺少什么我在这里?

+0

而'/ archives/2009/original-name.html'是一个现有的文件还是什么? – Gumbo 2010-02-08 09:38:13

+0

是的,/archives/2009/original-name.html存在。 – 2010-02-08 19:55:17

回答

0

你不需要用另一种方式吗?我没有测试代码,但它应该是这样的:

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

不,他正在将友好的无扩展网址映射到HTML文件,而不是其他方式。 – 2010-02-08 09:41:12

0

我看不出任何明显错误与您的正则表达式。

在猜测我会说你可能有一个规则在这之后的某个地方,它将任何没有结尾的斜线重定向到与斜线相当的位置(避免重复内容问题的常见做法)。

+0

我也会去猜这个。大多数框架已经包含Rewrite-rules,这些规则会在网址上添加斜线。处理参数,所以“URL/id/1 /”将被重写为“URL/page.php?id = 1”。所以你使用的任何框架/软件/产品都可能会干扰你的重写规则。 – Select0r 2010-02-08 10:02:03

+0

他正在使用Apache mod_rewrite。 – 2010-02-09 12:14:43

0

你在第二个声明中没有逃过你的期限。尝试这个。

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

同样的事情,仍然在寻找目录而不是文件 – 2010-02-08 19:54:59

+0

然后,你可能不得不重新陈述你的问题。没有人听到你很清楚你在说什么。你上面的例子正确地逃脱了控制字符。你有一些奇怪的位置“?”你已经解释清楚了。就像“档案”末尾的“s”为什么是可选的一样? – 2010-02-09 12:13:58