0

我正在尝试重写

index.php/component/easydiscuss/tags?Itemid=1

easydiscuss1.htm

我使用的规则是

RewriteEngine On
RewriteRule index.php/component/easydiscuss/tags?Itemid=1 easydiscuss1.htm [L]

但是,即使这个文件肯定在服务器上,由于某种原因我只是得到一个 404。

我认为可能是 get 参数导致了问题,因为我可以在没有这样的GET参数的情况下重写 url。

4

1 回答 1

2

两件事情。

  1. 查询字符串无法在重写规则中匹配,因此?在您的正则表达式模式中,是一个正则表达式?量词,这意味着“标签s”之后的右侧是可选的。显然,这根本不是你想要的。

  2. 您正在将 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]
于 2013-07-04T02:09:06.653 回答