2009-09-12 103 views
1

我有很多简单的规则在这个网站上工作,所以我知道mod_rewrite工作。我只是无法弄清楚如何为这种情况制定规则。我使用的是Joomla CMS,尤其是一个组件会产生可怕的URL,以复制网站上的其他(漂亮)网址。有一致的模式,所以我可以重写网址,但这是我的联盟使用正则表达式的方式。.htaccess文件需要复杂的重写规则

的不良网址是这样的:

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

(以下简称“111”部分是产生给唯一ID的URL的类别和文章部分蛞蝓,所以这些数字是每个URL独一无二的,根据该目录的数量ID的directory=2变化正在浏览)

好网址(已在网站上,通过核心的Joomla SEF产生)是这样的:

/category-name/article-name.html 

我知道我需要检测到错误的URL,然后重写删除那些slu IDs ID和尾随查询字符串。我尝试了一段令人尴尬的时间来解决问题,而且我认为我甚至没有太接近。

我对mod_rewrite /正则表达式大师的永恒感谢,他可以为我打破这一点。谢谢! -Kelly

回答

1

试试这个规则:

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

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

+0

非常感谢Gumbo!这对我有效。 – KellyRued 2009-09-12 23:01:25

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%肯定这一点。

您可以查询字符串可选附加到最终网址:

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

是的,我在网站根目录中使用.htaccess文件。我尝试在没有前导/的情况下添加第一条规则建议,并且它对网址没有任何影响。任何想法可能是什么问题?感谢您一直以来的帮助。 – KellyRued 2009-09-12 18:43:58