2013-07-04 26 views
0

我试图改写htaccess的重写变单一的URL在

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

easydiscuss1.htm

我使用的规则是

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

然而尽管如此,我仍然因为某种原因得到了404文件肯定是在服务器上。

我想也许get参数导致了一个问题,因为我可以重写url没有GET这样的参数很好。

回答

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] 

将重定向浏览器,告诉它,它请求的资源实际上是somwhere别的。然后,你需要一个规则来更改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] 
+0

非常感谢您深入的答案。我不在寻找动态匹配规则。我从字面上想要重写一个URL。我想在浏览器中输入http://mywebsite.com/index.php/component/easydiscuss/tags?Itemid=1,并将其发送到http://mywebsite.com/easydiscuss1.htm,这当然是存在的。我已经逃脱了?在之前的尝试中有一个反斜杠,但不是期间,我会再试一次。 –

+0

@LucasScholten啊,我编辑了答案,以涵盖#1中的错误 –

+0

非常感谢!你救了我的头发。 –