【问题标题】:Redirect specific virtual urls to index.html将特定的虚拟 url 重定向到 index.html
【发布时间】:2015-04-28 11:05:51
【问题描述】:

我目前尝试将我的语言特定虚拟网址重新编排为 index.html。 遗憾的是它不起作用,所以我在这里问你。

在我的 index.html 页面上,我使用历史 API 设置虚拟 url,如下所示:

history.pushState(null, null, 'de');

所以效果很好,但是当我手动输入 url 时,服务器会尝试打开 index.php/de,它存在。

我的想法是将所有虚拟 URL 重定向到 index.html 文件并保留初始 URL,例如“/de/”和“/en/”。然后,我将使用 js 在 index.html 中进行导航和内容加载。

  • domain.com/de -> 打开index.html并保留原来的url
  • domain.com/en -> 打开 index.html 并保留原来的 url

我的 mod_rewrite 代码:

RewriteEngine on
RewriteRule "^/de?$" "/index.html"

不幸的是,这段代码没有重定向。我的服务器日志说找不到 domain.com/de。

有解决这个问题的想法吗?

干杯 马可

【问题讨论】:

    标签: javascript apache .htaccess mod-rewrite


    【解决方案1】:

    RewriteRule 在 htaccess 中时会删除前导斜杠。
    所以你试图匹配一个错误的路径(这就是它不起作用的原因)。

    另外,去掉规则中的",在后面加上L标志。

    你可以用这个替换你的代码

    RewriteEngine On
    RewriteRule ^(?:de|en)$ /index.html [L]
    

    注意:确保 mod_rewrite 在您的 Apache 配置中启用(并且允许 htaccess 文件)


    编辑:考虑您在下面的评论

    RewriteEngine On
    RewriteRule ^(?:de|en)(?:$|/.+) /index.html [L]
    

    【讨论】:

    • 谢谢贾斯汀,现在可以了。最后一个问题:我如何更改重写规则以允许这样的事情:domain.com/en/bla?
    • 不客气。要回答您的问题,您可以查看我编辑的答案。这条新规则允许http://domain.com/enhttp://domain.com/en/something,但不允许http://domain.com/en/(与de 相同)
    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 2013-02-05
    • 2011-05-04
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多