mod_rewrite /重定向用?在查询字符串中

时间:2011-09-12 18:43:43

标签: .htaccess mod-rewrite

我第一次潜入htaccess / mod重写的使用,我在重定向/掩码方面遇到了一些麻烦。

我在我的根文件夹中有一个名为modrw的测试目录,该文件夹中的index.php文件非常简单:

<?php echo $_GET['name']; ?>

在浏览器中输入www.domain.com/modrw/{word}/,然后在页面上回显该词,这就是我想要的。

如果我输入www.domain.com/modrw/name={word},那么我会被重定向到www.domain.com/modrw/{word}/,并且该字也会按照我的意图回显。

但是,如果我将浏览器定向到网址www.domain.com/modrw/?name={word}/,则会回显该字词,但我不会像我希望的那样重定向到www.domain.com/modrw/{word}/

?如何造成麻烦?在下面的RewriteRule代码中包含?,我尝试了几种不同的方法,但无法使其正常工作。

这是我的htaccess文件:

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]

RewriteRule ^modrw/?name=([^/\.]+)/?$ http://www.domain.com/modrw/$1 [R]
RewriteRule ^modrw/([^/\.]+)/?$ modrw/?name=$1

导致问题的原因是,是否有一种特定的方式来包含?,它是否完全没有选择它?我采取了错误的做法吗?

我也尝试使用Options +FollowSymlinks,但我不完全确定这是做什么,也不是完全需要......

1 个答案:

答案 0 :(得分:3)

请记住,RewriteRuleonly与REQUEST_URI匹配。要匹配查询字符串,必须将RewriteCond与变量%{QUERY_STRING}一起使用。对于前者在你的情况下:

RewriteCond %{QUERY_STRING} ^name=(.*)(&|$) [NC]
RewriteRule ^modrw /modrw/%1? [L,R,NC]