两件事情。
查询字符串无法在重写规则中匹配,因此?
在您的正则表达式模式中,是一个正则表达式?
量词,这意味着“标签s
”之后的右侧是可选的。显然,这根本不是你想要的。
您正在将 URL 重写为 /easydiscuss1.htm
,这意味着您将获得 404,除非该文件easydiscuss1.htm
实际上存在。如果它在那里并且您实际上想要提供位于文档根目录中的文件“easydiscuss1.htm”,那么请参见上面的#1。
否则,你的规则倒退了。当您重写某些内容时,您会获取浏览器请求的内容,然后在服务器上进行更改。如果您将其更改为不存在的内容,那么您应该会遇到 404 错误。您可能想要的更多是这些方面:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index\.php/component/easydiscuss/tags\?Itemid=([0-9]+)
RewriteRule ^ /easydiscuss%2.htm [L,R=301]
这将重定向浏览器,告诉它它请求的资源实际上在其他地方。然后你需要一个规则来改变 URL :
RewriteRule ^/?easydiscuss([0-9]+)\.htm$ /index.php/component/easydiscuss/tags?Itemid=$1 [L]
编辑
你需要这个:
RewriteCond %{QUERY_STRING} ^Itemid=1$
RewriteRule ^index.php/component/easydiscuss/tags$ easydiscuss1.htm [L]