我在这个网站上有很多更简单的规则,所以我知道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
答案 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
标志将导致外部永久重定向。