使用查询字符串将URL重定向到路径,并且必须在内部重写不带查询字符串的url

时间:2013-12-03 02:18:43

标签: apache .htaccess mod-rewrite redirect

我一直在努力尝试。

如果有人去:

www.domain.nl/vereniging

内部页面请求:

www.domain.nl/?p=vereniging

为此我用这个:

RewriteCond %{QUERY_STRING} !(p=.*)$
RewriteRule ^(.+)$ ?p=$1 [NC]


如果用户访问:

www.domain.nl/?p=vereniging

我希望将用户重定向到:

www.domain.nl/vereniging

为此我使用:

RewriteCond %{QUERY_STRING} ^p=(.*)$    [NC]
RewriteRule ^$ http://www.domain.nl/%1?     [NC,R=301]

(如果我在此之前放了 RewriteCond%{REQUEST_FILENAME}!-d ,它就不再重定向。这很奇怪,因为查询不是目录吗?)

另外,这2个代码块也可以工作。

但是,如果我把它们放在1 .htaccess中它会引发循环。我不明白这一点,因为条件应该阻止循环。

2 个答案:

答案 0 :(得分:0)

尝试将END标志应用于第一个或第二个RewriteRule。

在这里查看END标志:http://httpd.apache.org/docs/current/rewrite/flags.html

答案 1 :(得分:0)

您需要检查实际请求:

RewriteCond %{THE_REQUEST} \?p=([^&\ ]+)
RewriteRule ^ /%1? [L,R=301]