使用htaccess mod_rewrite进行奇怪的重定向

时间:2015-05-31 17:21:24

标签: php .htaccess mod-rewrite netcat

在我的.htaccess中我有这样一句话:

RewriteEngine On
RewriteCond %{http_host} ^test.ru [nc]
RewriteRule ^(.*)$ http://www.test.ru/$1 [r=301,nc]
RewriteBase /
RewriteRule ^(.*)/$ index.php?string=$1 [NC,L]

所以我想将test.ru改为www.test.ru

并将www.test.ru/my_string_value/提供给$ _GET [' string']

(例如从这个网址www.test.ru/ru/pages/id/),爆炸这个ru / pages / 888,获取我的参数(lang = ru,cat = pages,id = 888)。

当我试图检查www添加部分(写test.ru必须制作www.test.ru)时,请注意:

http://www.test.ru/index.php?string=http://www.test.ru

参数获取正常!

还有一件有趣的事!在压制线之后

#RewriteEngine On
#RewriteCond %{http_host} ^test.ru [nc]
#RewriteRule ^(.*)$ http://www.test.ru/$1 [r=301,nc]
#RewriteBase /
#RewriteRule ^(.*)/$ index.php?string=$1 [NC,L]

得到同样的东西!

出了什么问题。

1 个答案:

答案 0 :(得分:0)

你有一些错误的顺序,但你可能会被缓存。浏览器将缓存301重定向。清除浏览器缓存或尝试其他浏览器。测试时也使用302。当一切正常时,切换到301。你也应该在重定向上使用L标志。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^test\.ru [NC]
RewriteRule ^(.*)$ http://www.test.ru/$1 [R=302,NC,L]
RewriteRule ^(.*)/?$ index.php?string=$1 [NC,L]