Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为现有ASP.NET网站中基于区域设置的URL添加子目录,正确解析相对路径_Asp.net_Seo_Iis 7.5_Multilingual_Url Rewrite Module - Fatal编程技术网

为现有ASP.NET网站中基于区域设置的URL添加子目录,正确解析相对路径

为现有ASP.NET网站中基于区域设置的URL添加子目录,正确解析相对路径,asp.net,seo,iis-7.5,multilingual,url-rewrite-module,Asp.net,Seo,Iis 7.5,Multilingual,Url Rewrite Module,现有的ASP.NET(MVC和webforms混合)网站显示翻译后的内容。该语言基于存储用户偏好的cookie。当用户更改设置时,URL没有更改。内容将以首选语言重新加载对于搜索引擎优化,URL(support.google.com/webmasters/answer/182192?hl=en)中应包含区域设置。 我尝试了以下方法: 1) 使用URL重写模块:() 问题: -所有超链接和重定向仍然指向没有区域设置的旧URL。 -需要基于文件夹结构和用途的复杂出站规则(绝对路径和相对路径的混合,

现有的ASP.NET(MVC和webforms混合)网站显示翻译后的内容。该语言基于存储用户偏好的cookie。当用户更改设置时,URL没有更改。内容将以首选语言重新加载
对于搜索引擎优化,URL(support.google.com/webmasters/answer/182192?hl=en)中应包含区域设置。


我尝试了以下方法:
1) 使用URL重写模块:()
问题:
-所有超链接和重定向仍然指向没有区域设置的旧URL。
-需要基于文件夹结构和用途的复杂出站规则(绝对路径和相对路径的混合,例如…/,~/,/)。
-还需要根据文档禁用静态压缩
-由于Html的大小较大,因此需要考虑性能问题。 -由于相对路径重写中的问题,回发会导致运行时异常。 -脚本文件(ajax加载等)中定义的路径是一个巨大的挑战 -基本标记无法按预期工作,因为重写模块似乎附加了../()

2) IIS 7.5虚拟目录:
为每种语言创建虚拟目录并将其指向根目录。i、 e.www.example.com是根目录,www.example.com/fr-ca/是映射回根目录的虚拟目录
问题:
-配置文件中出现运行时异常,表示需要将虚拟目录转换为应用程序
-将其转换为应用程序会出现500.19错误,因为web配置中存在重复条目(因为虚拟目录指向根目录)
-我尝试将根目录移动到另一个子目录(即,每种语言都有一个物理目录)以避免web配置冲突,但这会导致某种“内核”错误。此外,这将意味着更改应用程序的物理结构,并解决路由问题

3) 使用子域:
我也考虑过为每种语言单独使用子域和托管应用程序,但这有很多缺点,包括必须解决可伸缩性、单点登录、cookie、特定于域的东西,如分析等


那么,在URL中包含一个语言子目录,并创建与该子目录相关的所有链接,最简单的方法是什么呢


注意:该站点包含绝对路径和相对路径的混合,例如(../,~/,/)有时与ResolveClientUrl、ResolveUrl一起使用。最后,我们使用选项2,并执行以下步骤:

  • 创建新文件夹,将应用程序的副本部署到新文件夹。新文件夹应位于与根应用程序不同的目录中

  • 在根应用程序下创建新的虚拟应用程序*(非虚拟目录);每种新语言1个,指向新文件夹。(如果将来需要,任何虚拟应用程序都可以指向为该特定语言定制的不同文件夹)

  • 在新文件夹中,删除web.config文件的system.webServer部分中的模块和处理程序部分(它们将从父web.config继承)

  • 如果您使用的是SQL会话状态,则需要在web.config中指定自定义应用程序名称,并修改TempGetAppID存储过程,以便应用程序名称在所有虚拟应用程序中都相同。见下文()

  • 希望所有链接都能在服务器端使用Url.Content(MVC)或ResolveUrl(webforms)解析。如果没有,则需要修复。javascript中指定的任何路径也不会自动解析为虚拟应用程序(它们仍然会解析为根应用程序)

  • 测试一下。每一个环节。(我认为,像尖叫蛙这样的工具可能有助于确保不返回404。但它无法解决HTTP POST问题)

  • 请注意,根据自定义错误处理和任何现有的URL重写规则,步骤可能会有所不同

  • 摘要:选项1(URL重写)完全不切实际。选项2(子目录)是最实用的解决方案,但是它并不像应该的那样简单