我在 Apache 服务器上设置了一些重定向。他们看起来有点像这样:
重定向 /Name/register /login.html
我的问题是……有没有办法通过这个重定向来保留 HTTP Referrer?似乎默认情况下,Apache 会丢弃这些信息。如果在重定向完成后推荐人说:
http://the.orginalurl.com/Name/register
任何人,如果这甚至是可能的?如果没有,请考虑替代方案。
非常感谢,尼尔
我在 Apache 服务器上设置了一些重定向。他们看起来有点像这样:
重定向 /Name/register /login.html
我的问题是……有没有办法通过这个重定向来保留 HTTP Referrer?似乎默认情况下,Apache 会丢弃这些信息。如果在重定向完成后推荐人说:
http://the.orginalurl.com/Name/register
任何人,如果这甚至是可能的?如果没有,请考虑替代方案。
非常感谢,尼尔
Redirect
不会保留引荐来源网址,因为浏览器会收到 301 和要打开的新地址。从手册:
Redirect 指令通过要求客户端在新位置重新获取资源来将旧 URL 映射到新 URL。
mod_rewrite和(我认为)别名可以直接重写(即不会导致浏览器重定向)并将保留引荐来源网址。使用 mod_rewrite,您甚至可以根据需要将引用者作为 GET 参数添加到您的请求中。
我创建了一种替代方式,通过 301 重定向转移推荐人。 https://webmasters.stackexchange.com/questions/4665/
这是浏览器问题,不是apache。您对此无能为力。这样做是为了防止某些安全问题和推荐人垃圾邮件。
您始终可以在请求开始时将原始引荐来源网址存储在管道变量中,然后从那里提取它。
我相信这完全取决于您如何编写规则。根据您提供的标志,它可以充当“重定向”或“重写”。
302 将被发送到浏览器,它会发起另一个请求(请参阅启用了“persist”选项的 Firebug):
RewriteCond %{REQUEST_URI} !/index.html
RewriteRule ^(.*)$ /index.html [R=302,L]
浏览器不会发起 302 重定向,因为我们不发送此类标头,但它会屏蔽内容:
RewriteCond %{REQUEST_URI} !/index.html
RewriteRule ^(.*)$ /index.html [L]
在此选项中,如果有人访问“page.html”,他将看到“index.html”的内容而不是“page.html”,但上面的 URL 仍将显示“page.html”
适合维护页面等...不确定登录页面...但这是另一个需要考虑的选择。
在我的具体情况下,“RewriteRule”与“Alias”之间的主要区别在于,可以在 .htaccess 中设置重写,而“Alias”则不能……所以并非总是可以使用 Alias……