我正在尝试重写
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
参数的网址,就像这样。
答案 0 :(得分:2)
两件事。
在重写规则中无法匹配查询字符串,因此正则表达式模式中的?
是正则表达式?
量词,意味着s
权限“标记”之后是可选的。显然,这根本不是你想要的。
您正在将网址重写为 /easydiscuss1.htm
,这意味着除非文件easydiscuss1.htm
确实存在,否则您将获得404。如果它在那里你实际上想要提供文件根目录中的文件“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]