【问题标题】:Problem with url-rewriting for a multi-language website多语言网站的 url 重写问题
【发布时间】:2019-01-04 22:19:42
【问题描述】:

我尝试为我的多语言网站设置一些 url 重写规则。 它工作正常,我想应用一些更正,但现在它不再工作了。

当我尝试这个网址:http://mywebsite.fr/fr/ 时,浏览器会更改http://mywebsite.fr/fr/?lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr&lang=fr 的网址

代码如下:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(fr|en|nl)/$ index.php?lang=$1&%{QUERY_STRING} [L]

我对自己说这种错误不可能来自 url-writing,所以在我的 php 代码中,我在页面的最开始放置了一个“return false”,问题仍然出现在一个白色的页面上。 ..

另外,如果我禁用所有 url 重写规则,我会收到一个 apache 错误“未找到”...

我也试过重启 Apache,同样的问题...

有人有想法吗? 谢谢!

【问题讨论】:

    标签: php apache url-rewriting


    【解决方案1】:

    你看到的是一个典型重写循环。原因是你无条件地重写,不管重写的目的是否已经达到,所以之前是否已经进行过重写。

    你可以使用一个条件来解决这个问题:

    Options +FollowSymlinks
    RewriteEngine on
    RewriteCond %{QUERY_STRING} !^lang=
    RewriteRule ^/?(fr|en|nl)/?$ /index.php?lang=$1 [L,QSA]
    

    【讨论】:

    • 感谢您的回复,但它不起作用。现在我有一个 apache 错误“未找到”,它继续使用循环重定向到 url....
    • 未找到?那说明你没有index.php路由脚本?
    • 是的,我有一个 index.php 文件。现在它的行为与没有 url-rewrting 规则相同......它说:“未找到请求的 URL /fr/ 在此服务器上找不到。”
    • 问题仍然存在,但是现在当我尝试使用 url mywebsite.fr/fr 时,没有循环,但是当我点击一个链接时,我有一个 apache “未找到”错误并且循环出现在 URL 上。
    • 听起来像您在index.php 中实现的框架只提供相对引用。这意味着您“点击”的最终 URL 指向 http://mywebsite.fr/fr/... 之类的东西,我敢说这 不是 你想要的。在您的问题中,您专门从内部重写开始,也许您实际上想要 external redirection ?像RewriteRule ^/?(fr|en|nl)/?$ /index.php?lang=$1 [R=302,QSA] 这样的东西?不过,请注意在会话中存储语言选择...
    猜你喜欢
    • 2011-11-03
    • 2014-02-17
    • 1970-01-01
    • 2020-04-29
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多