.htaccess文件需要复杂的重写规则

时间:2009-09-12 17:31:06

标签: regex mod-rewrite

我在这个网站上有很多更简单的规则,所以我知道mod_rewrite正在运行。我无法弄清楚如何为这种情况创建规则。我正在使用Joomla CMS,特别是一个组件生成了可怕的URL,这些URL复制了网站上的其他(漂亮)URL。有一个一致的模式,所以我可以重写URL,但这是我的联盟使用正则表达式。

错误的网址如下所示:

/component/content/article/111-category-name/111-article-name.html?directory=2 

(“111”部分是为了为URL的类别和文章部分提供唯一ID而生成的slug,因此这些数字对于每个URL都是唯一的,并且directory=2会根据数量而变化正在浏览的目录的ID)

良好的网址(已在网站上,由核心Joomla SEF生成)如下所示:

/category-name/article-name.html

我知道我需要检测错误的URL,然后重写以删除那些slug ID和尾随查询字符串。我已经尝试过一段令人尴尬的时间来解决这个问题,而且我认为我甚至不能远离它。

我永远感谢mod_rewrite /正则表达大师谁可以为我打破这个。谢谢! -Kelly

2 个答案:

答案 0 :(得分:2)

假设这是在你当地的.htaccess。

RewriteRule ^component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L]

如果你的httpd.conf中有这个,我相信这是一个小改动:

RewriteRule ^/component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L]

但我对此并不是100%肯定,因为我很少这样做。

您可以选择将查询字符串附加到结果URL:

RewriteRule ^component/content/article/\d+-(.*?)/\d+-(\.*?\.html) /$1/$2 [L,QSA]

答案 1 :(得分:1)

尝试此规则:

RewriteRule ^component/content/article/[0-9]+-([^/]+)/[0-9]+-([^/]+\.html)$ /$1/$2? [L,R=301]

替换中的空查询字符串将删除原始查询字符串(如果存在)。 R=301标志将导致外部永久重定向。