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

Regex .htaccess文件需要复杂的重写规则,regex,mod-rewrite,Regex,Mod Rewrite,我在这个网站上有很多更简单的规则,所以我知道mod_rewrite正在工作。我只是不知道如何为这种情况创建规则。我正在使用Joomla CMS,其中一个特别的组件是生成可怕的URL,与站点上的其他(漂亮的)URL重复。有一个一致的模式,所以我可以重写的网址,但这是我的方式使用正则表达式 错误的URL如下所示: /component/content/article/111-category-name/111-article-name.html?directory=2 /category-nam

我在这个网站上有很多更简单的规则,所以我知道mod_rewrite正在工作。我只是不知道如何为这种情况创建规则。我正在使用Joomla CMS,其中一个特别的组件是生成可怕的URL,与站点上的其他(漂亮的)URL重复。有一个一致的模式,所以我可以重写的网址,但这是我的方式使用正则表达式

错误的URL如下所示:

/component/content/article/111-category-name/111-article-name.html?directory=2 
/category-name/article-name.html
(“
111
”部分是生成的slug,为URL的类别和文章部分提供唯一的ID,因此每个URL的这些数字都是唯一的,
目录=2
根据所浏览目录的编号ID而变化)

好的URL(已经在站点上,由core Joomla SEF生成)如下所示:

/component/content/article/111-category-name/111-article-name.html?directory=2 
/category-name/article-name.html
我知道我需要检测坏的URL,然后重写以删除那些slug id和后面的查询字符串。我花了很长时间试图解决这个问题,但我觉得我一点也不接近


我永远感谢一位mod_重写/正则表达式大师,他能帮我解决这个问题。谢谢-Kelly

假设这是在本地.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]
试试这个规则:

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

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

是的,我正在使用站点根目录中的.htaccess文件。我尝试在没有前导/的情况下添加您的第一条规则建议,但它对URL没有任何影响。你知道问题出在哪里吗?谢谢你迄今为止的帮助。