【问题标题】:Virtual subfolders .htaccess ignore language code for source purposes虚拟子文件夹 .htaccess 出于源目的而忽略语言代码
【发布时间】:2014-02-12 11:03:24
【问题描述】:

我使用以下规则进行语言翻译。

两者都可以正常工作:

RewriteRule ^([a-z]{2})/?$ /index.php?act=setlang&val=$1  [L,CO=LANG:$1:%{HTTP_HOST}]

RewriteRule ^([a-z]{2})/([a-zA-Z0-9-]+)\.php$ $2.php?act=setlang&val=$1 [L,CO=lang:$1:%{HTTP_HOST}]

所以去 www.mysite.com/en/test.php 这按预期工作。

但是,如果我将基本 URL 从 mysite.com tomysite.com/(2letterlangcodehere) 更改为 这样所有链接都会自动带有 lang 前缀,然后一切都变得混乱(我认为这是由于相对路径,因为正在寻找 mysite.com/(2letterlangcodehere) 下显然不存在的某些资源,因为我没有物理创建文件夹)。

我怎样才能让 mysite.com/(langcodehere) 在视觉上出现并执行上面的规则,但本质上这个文件夹只是指向 mysite.com/ 的脚本、css、源代码透视图是可能的。 htaccess ?

【问题讨论】:

    标签: php apache .htaccess mod-rewrite redirect


    【解决方案1】:

    尝试在现有规则之前插入此规则:

    RewriteRule ^[a-z]{2}/(.+?\.(?:jpe?g|gif|bmp|png|tiff|css|js))$ /$1 [L,NC,R=301]
    

    如果这不起作用,那么您有 2 个选择:

    1. 在您的 css、js、图像文件中使用绝对路径而不是相对路径。这意味着您必须确保这些文件的路径以 http:// 或斜杠 / 开头。
    2. 尝试在您的页面标题中添加此内容:<base href="/" />

    【讨论】:

    • 谢谢,它部分工作,但这是正确的解决方案,我想我必须坚持使用绝对 url.. 因为 lang 路径可能存在也可能不存在,所以相对不能是一个选项。跨度>
    • 没错,绝对 URL 最适合虚拟文件夹/漂亮 URL。
    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 2020-08-28
    • 2018-05-22
    • 1970-01-01
    相关资源
    最近更新 更多