【问题标题】:How can I edit a portion of a URL and reload the new page如何编辑 URL 的一部分并重新加载新页面
【发布时间】:2014-03-17 20:24:21
【问题描述】:

晚上好。

这是我在这里发表的第一篇文章,所以我希望我做对了。

我到处寻找(无论是在这个网站上还是在其他地方),寻找解决我遇到的问题的方法,但我找不到任何听起来像我的问题的东西,但我知道从逻辑上讲它应该是可行的!

我维护两个 Intranet 站点 - 一个英语站点和一个威尔士站点。它们是彼此的镜像,只是域名和站点名称发生了变化:

例子

  http://english-site/news/item/003/170314.htm
  http://welsh-site/newyddion/item/003/170314.htm

到目前为止,我只找到了这个:http://www.codingforums.com/javascript-programming/8523-how-do-i-switch-pages-automatically.html

这给了我一些希望,但我不知道如何将其应用于我的情况。

所以,问题是这样 - 有没有办法编辑和重新加载超链接切换出来:

英文网站/新闻/

为此:

威尔士网站/newyddion/

但保持链接的其余部分相同,以便页面加载与其自身相同的威尔士语或英语。

我知道大多数现代 CMS 可以自动执行此类操作...但我没有使用现代 CMS...我正在使用 FrontPage...我确定这是可能的,但找不到任何地方同意我的观点!

提前为任何人提供的帮助干杯!

【问题讨论】:

  • 您的页面示例会很有用(可能在 JSFiddle 中)。 JQuery 当然可以使用表达式更改页面上的所有链接。
  • 如果您在两个镜像站点中手动编写这些链接,我不知道内置的任何内容。您需要实现并开始调用具有区域设置的 UrlRegistry.getURL() ,可以在任何需要 URL 的地方调用它。您目前如何维护您的链接?
  • 因此,换句话说,您希望从一个页面重定向到另一个页面。

标签: javascript jquery html url frontpage


【解决方案1】:

FrontPage 很古老,你真的不应该使用它。

话虽这么说,这点 JS 应该做你想做的:

window.location.href = "http://welsh-site/newyddion" + window.location.pathname.substring(window.location.pathname.indexOf('/', 1));

可以使用window.location.pathname 访问当前页面的路径(域名后面的所有内容)。在此使用indexOf('/', 1) 可以为我们提供第一个/ 字符在字符串中的位置(从0 开始)(我们将1 作为第二个参数传递以忽略起始斜杠)。然后我们使用 substring 从该字符开始获取所有内容。

最后,我们将新 URL 设置为 window.location.href,它执行重定向。

您可以使用正则表达式来做到这一点,但这也同样有效。

【讨论】:

  • 英文和威尔士文的网址不完全相同
  • 我知道有人在使用首页。
  • FrontPage 是对记事本的巨大改进(仍然在使用):)
  • @TrueBlueAussie,不 - 记事本比首页要好得多 :) 但有些人根本没有选择,他们被困在旧系统上。
【解决方案2】:

我假设您的页面有一个按钮/链接/选择事件,该事件通过说出EnglishWelsh 来触发您要服务的域。鉴于这种情况,您可以执行如下所示的简单 javascript 替换:

if (selection === "blah blah"){
    domain = "http://domainA...";
} else {

    domain = "http://domainB...";
}


window.location.replace(domain);

reference

【讨论】:

    【解决方案3】:

    我不建议使用 javascript 生成 url,而是使用 rel="alternative" 和 hreflang="code" 将每个页面上的链接链接到相应的翻译页面,其中语言代码对应于 2 个字母的语言代码http://googlewebmastercentral.blogspot.mx/2010/09/unifying-content-under-multilingual.html 中描述的标准 指示机器人页面是不同语言的相同内容。

    如果您可以使用一些 php 或服务器端代码,您可以通过将 url 替换为您尝试从当前 url 创建的新 url 来非常轻松地创建链接引用。这是通过使用与您的 url 重写标准完全匹配的模式来完成的,也就是说,如果您没有任何模式,最好将每个链接 url 设置为每页分开。

    假设您只需要将英语站点域转换为威尔士站点和新闻路径段即可。根据http://reference.sitepoint.com/html/lang-codes,威尔士语 2 字母标准将是 'cy'。

    <?php
    $lang['cy']['domain'] = 'welsh-site';
    $lang['cy']['lang'] = 'Welsh';
    $lang['cy']['news_slug'] = 'newyddion';
    $lang['en']['domain'] = 'english-site';
    $lang['en']['lang'] = 'English';
    $lang['en']['news_slug'] = 'news';
    $lang['default'] = 'en';
    

    解释:

    我们正在定义一系列语言,我们将在其中设置我们需要翻译的任何内容。这是一个多维数组映射,它在第一维中通过键定义每种语言,然后在第二维中定义要翻译的每个段。在第二个维度中,我们将设置以 _slug 结尾的特殊键,这将是要翻译的 url 的一部分。这个数组可以保存在一个特殊的文件中,除了其他任何东西,我们可以轻松地去哪里编辑,而无需我们修改核心代码。

    定义初始语言设置后,现在您需要代码来识别当前语言和路径:

    <?php
    include('lang.php'); //this is the file where the language array is defined
    $path = $_SERVER['REQUEST_URI'];
    $host = isset($_SERVER['HTTP_HOST']) ? substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], ':')) : $_SERVER['SERVER_NAME'];
    foreach ($lang as $code => $l) {
        if ($l['domain'] == $host) {
            $current_lang = $code;
            break;
        }
    }
    if ( ! isset($current_lang)) { 
        $current_lang = $lang['default'];
    }
    $_ = $lang[$current_lang];
    $segment_1 = reset(explode('/', trim($path, '/'));
    foreach ($lang[$current_lang] as $section => $url_segment) {
        if ($segment_1 == $url_segment && substr($section, -5) == '_slug')
            $current_section = $section;
            break;
        }
    }
    

    解释:

    此代码用作获取当前部分和语言的桥梁代码。首先我们获取主机(域名)和url路径。在第一个循环中,我们匹配任何语言域以找到正确的语言,然后在第二个循环中,我们尝试找到与当前语言相关的当前部分。

    现在用一些代码来编写使用已知信息的链接:

    <head>
    <?php foreach ($lang as $code => $l): ?><?php if ($code != $current_lang) : ?>
    <?php $lang_path = isset($current_section) ? str_replace('/' . $_[$current_section] . '/', '/' . $l[$current_section] . '/', $path) : $path; ?>
    <?php $lang_url = '//' . $l['domain'] . $lang_path; ?>
        <link rel="alternative" hreflang="<?php echo $code; ?>" href="<?php echo $lang_url; ?>">
    <?php endif; ?><?php endforeach; ?>
    </head>
    

    解释:

    我们正在添加链接,这些链接会告诉机器人您页面中的其他链接只是该页面以不同语言的不同表示形式。我们还在 hreflang 属性中指定了语言代码 (http://googlewebmastercentral.blogspot.mx/2010/09/unifying-content-under-multilingual.html)

    然后您以完全相同的方式创建链接(在某处的正文部分):

    <ul>
    <?php foreach ($lang as $code => $l): ?>
    <?php     if ($code != $current_lang) : ?>
    <?php         $lang_path = isset($current_section) ? str_replace('/' . $_[$current_section] . '/', '/' . $l[$current_section] . '/', $path) : $path; ?>
    <?php         $lang_url = '//' . $l['domain'] . $lang_path; ?>
        <li><a href="<?php echo $lang_url; ?>"><?php echo $l['lang']; ?></a></li>
    <?php     else : ?>
        <li class="active"><?php echo $l['lang']; ?></li>
    <?php     endif; ?>
    <?php endforeach; ?>
    </ul>
    

    为了使这一切正常工作,您的服务器必须支持 PHP 扩展。我使用了 php 代码,因为这是最常见的代码支持。

    您还需要将文件扩展名从 .html 更改为 .php 才能正常工作。

    希望它对你有用。这可能不是您想要的,而是您真正需要的。

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      相关资源
      最近更新 更多