gpt4 book ai didi

.htaccess - 在 htaccess 中设置条件重定向

转载 作者:行者123 更新时间:2023-12-04 18:43:56 24 4
gpt4 key购买 nike

我被要求制作一个多语言的现有网站。

为此,我不得不将所有现有页面从/path/page 移动到/en/path/page

为了维护任何现有的传入链接,我现在需要设置一个 htaccess 重定向,以将任何请求从其原始 url 发送到新的/en/path/page url,但我无法使其正常工作。

这就是我目前拥有的;

RewriteCond %{REQUEST_URI} !^/en$
RewriteRule ^(.*)$ /en/$1 [R=301,L]

我认为这是为了检查请求的 URI,如果它不以/en 开头,则在请求的 URI 前面加上/en ......但我显然错了,因为它不起作用。

任何帮助表示赞赏。谢谢你。

更新。
由于这是一个 ExpressionEngine 站点并且有一个额外的规则来删除 URL 的 index.php 部分,这里是两个规则
# Rewrite for new language based urls
# This is to try and get all current pages going to /en/(old url) with a 301 redirect
RewriteCond %{REQUEST_URI} !^/en(/.*)?$
RewriteRule ^(.*)$ /en/$1 [R=301,L]


# Removes index.php
RewriteCond $1 !\.(gif|jpe?g|png|ico)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

我也尝试过在 index.php 之后重写语言。我仍然陷入循环。

最佳答案

它的作用是检查 URI 是否不完全是 /en , 自 $表示紧跟在 en 之后的字符串的结尾.

试试这个,它会检查 URI 是否不完全是 /en/en/或不以 /en/ 开头,如果是这样的话,它会在前面加上 /en/ :

RewriteCond %{REQUEST_URI} !^/en(/.*)?$
RewriteRule ^(.*)$ /en/$1 [R=301,L]

更新 考虑到您在 .htaccess 中的其他规则文件,以下内部重定向到 /index.php... 需要再次匹配语言规则,否则你最终会陷入无限循环。

可能有更好的方法来防止这种情况发生,但是我首先想到的是检查 index.php在第一种情况下:
RewriteCond %{REQUEST_URI} !^/(index\.php|en)(/.*)?$

所以这将导致规则在内部重定向后不适用。但请注意,这仅解决了内部重定向转到 index.php 的特定情况下的问题。 !

关于.htaccess - 在 htaccess 中设置条件重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18229829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com