我90%肯定这个问题的答案,但我想要肯定:
默认情况下(例如,不使用301修饰符),在Apache内部进行mod_rewrite路由,还是通过http标头或其他方法重定向客户端?
我的所有直觉,研究和经验都表明重定向是在内部完成的。通过'内部',我的意思是客户端忘记了mod_rewrite正在使用的事实。例如,请考虑以下规则:
RewriteRule ^([^/]+)$ dispatcher.html?cat=$1
当针对此规则适用的请求(例如example.com/testing
)时,请求被重定向(例如,example.com/dispatcher.html?cat=testing
)。我对mod_rewrite的理解是模块只是重写了请求,因此原始请求似乎来到了example.com/dispatcher.html?cat=testing
。
这是对的吗?
答案 0 :(得分:4)
默认情况下(例如,不使用301修饰符),在apache内部进行mod_rewrite路由,还是通过http头或其他方法重定向客户端?
您展示的示例将在内部重写。
如果您明确强制使用完整网址,则会发生标头重定向,除非(如果我读取docs权限),如果完整网址指向与当前正在处理的域相同的域,则在这种情况下,该部分指定服务器将被剥离,并执行内部重定向。
文档中的此列表显示了所有可能的方案:
Given Rule Resulting Substitution
---------------------------------------------- ----------------------------------
^/somepath(.*) otherpath$1 invalid, not supported
^/somepath(.*) otherpath$1 [R] invalid, not supported
^/somepath(.*) otherpath$1 [P] invalid, not supported
---------------------------------------------- ----------------------------------
^/somepath(.*) /otherpath$1 /otherpath/pathinfo
^/somepath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo
via external redirection
^/somepath(.*) /otherpath$1 [P] doesn't make sense, not supported
---------------------------------------------- ----------------------------------
^/somepath(.*) http://thishost/otherpath$1 /otherpath/pathinfo
^/somepath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo
via external redirection
^/somepath(.*) http://thishost/otherpath$1 [P] doesn't make sense, not supported
---------------------------------------------- ----------------------------------
^/somepath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo
via external redirection
^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
via external redirection
(the [R] flag is redundant)
^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
via internal proxy