如何从Classic ASP Request获取* actual * client URL?

时间:2009-06-09 19:43:09

标签: asp-classic

尝试在旧(经典)ASP网站上进行一些SEO治疗。

主页一直是home.asp,但我们希望所有入站链接都转到站点根目录(“/”)。对页面进行了更改,但现在我们需要进行重定向,因此我们没有破坏传统的入站链接。

我基本上想要这样做:

<% if Request.ServerVariables("PATH_INFO") = "/home.asp" then
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.mysite.com/"
end if %>

问题是,即使我转到站点根目录,PATH_INFO,SCRIPT_NAME和PATH_TRANSLATED变量都返回“/home.asp”。所以它最终会在一个永不停止的循环中重定向到自身。

有什么想法吗?

修改

为了澄清,我知道IIS中的默认文档设置为home.asp,并且已经考虑过建议的解决方法。但是,我目前没有权限更改它,这就是为什么我在这里问是否有任何方式可以询问 ASP 客户端使用的URL是什么。看来没有办法做到这一点,所以我会请求访问权限将欢迎页面更改为其他内容。

6 个答案:

答案 0 :(得分:2)

我会创建一个新的默认文档来提供主页,例如 index.asp ,并确保将index.asp设置为IIS中最顶层的默认文档。

答案 1 :(得分:2)

据我了解,如果地址包含“/home.asp”到“/”,则需要更改浏览器的地址值。例如:

http://www.sitename.com/?some=querystring

而不是

http://www.sitename.com/home.asp?some=querystring

在经典的asp中,脚本在将结果发送到客户端之前在服务器上工作,因此在执行代码之前无法收集浏览器地址值,但是使用javascript等客户端脚本语言。

将Request.ServerVariables与“URL”,“PATH_INFO”,“PATH_TRANSLATED”等一起使用是行不通的,因为他们假设返回“当时工作”脚本的名称(asp页面)

但是有一种方法可以将所有旧的home.asp页面重定向到新的根URL。您可以对新版本的站点使用smiple查询字符串检查。例如:

如果旧地址如下:

"http://www.sitename.com/home.asp?some=querystring&more=querystring"

然后将其重定向到:

"http://www.sitename.com/?ver=2&" & Request.QueryString

在脚本中,您可以检查 查询字符串(“v”)= 2 ,以确定该地址是否来自新版本,否则将其重定向到<无论网址是什么,强> /?v = 2

答案 2 :(得分:1)

他们回到home.asp的原因是因为该站点的IIS配置中的默认内容文档将在您拥有的其他页面上方列出home.asp,并且可能是您想要的那个。

尽管HTTP允许您请求目录...即http://www.example.com/几乎所有服务器都为此文档提供站点中的一个页面,它通常称为默认。*或索引。*(其中*是服务器处理的任何内容类型扩展名。)

从“文档”选项卡中删除home.asp将阻止无限循环,但您可能会发现您也无意中破坏了您的网站。

答案 3 :(得分:1)

您可以在首次重定向页面时创建会话对象,然后在重新定向之前检查该会话(自从我使用经典asp之后已经过了几年,但这应该有效):

<% 
if Request.ServerVariables("PATH_INFO") = "/home.asp" AND NOT Session("HasBeenHere") then
  Session("HasBeenHere") = True
  Response.Status="301 Moved Permanently"
  Response.AddHeader "Location","http://www.mysite.com/"
end if 
%>

答案 4 :(得分:1)

要检查的一件事是默认列表中是否有任何文件高于home.asp。如果您没有管理员权限,可以通过创建如下页面进行试验:

index.asp
default.asp

等等。如果您可以找到优先级高于home.asp的文件名,则可以将home.asp中的内容复制到此新文件中,并将home.asp更改为仅重定向到根目录。 / p>

如果home.asp是列表中的最高条目,那么我唯一可以建议的是输出HTTP标头的完整列表,并比较访问时产生的输出/而不是访问/home.asp。希望你能发现你能够利用的差异。

<%
  for each header in Request.ServerVariables
      response.write header & " : " & Request.ServerVariables(header) & "<br />"
  next
%>

答案 5 :(得分:1)

Request.ServerVariables("URL")没有给出正确的值吗?

据我所知,应该是用户提出的实际HTTP请求中的URL

相关问题