重定向 301 时出现内部服务器错误

getting a internal server error on redirect 301

我的旧页面 url 看起来像这样

https://blabla.com/us/sample-data/us/

我的新 url 看起来像这样

https://blabla.com/us/data/sample/us/

我将其添加到我的 htaccess

<IfModule mod_rewrite.c>
Redirect 301 ^sample-data/us/ /data/sample/us/ [NC,L]
</IfModule>

但我得到了 internal server error

url 中的第一个 us 是动态的,具体取决于用户所在的国家/地区。第二个 us 是国家样本数据。这是目前 10 个国家/地区的列表。可能更多。

我试过了

RewriteRule ^sample-data/us/ /data/sample/us/ [L,R=301,NC]

但也不走运。它也重定向

https://blabla.com/data/sample/us/ 错过第一个 /us/

如何让这个重定向工作?谢谢

<IfModule mod_rewrite.c>
Redirect 301 ^sample-data/us/ /data/sample/us/ [NC,L]
</IfModule>

but i'm getting a internal server error

因为该指令在语法上无效。 [NC,L] 参数是属于 mod_rewrite RewriteRule 指令的参数。 Redirect 是一个 mod_alias 指令 - Redirect 指令没有这样的“标志”参数。

RewriteRule ^sample-data/us/ /data/sample/us/ [L,R=301,NC]

but no luck either. it redirects too

https://blabla.com/data/sample/us/ missing the 1st /us/

您的指令中似乎缺少第一个 /us/(虚拟路径段),所以我根本看不出这是如何重定向的(除非您看到缓存的响应,或者 其他东西 正在执行重定向)?这个 .htaccess 文件大概在文档根目录中,你大概在请求 URL /us/sample-data/us/ 而第一个 /us/ 是虚拟的 - 所以上面的指令不可能做任何事情?

如果第一个路径段是可变的并且您需要重定向到同一路径段并假设它由两个小写的 a-z 字母组成,那么请尝试以下操作:

RewriteRule ^([a-z]{2})/sample-data/us/ //data/sample/us/ [R=302,L]

但是第二个 /us/ - 这不也是可变的吗? /XX/(两个字母)的第一个和第二个实例应该相同吗?

首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。测试前您需要清除浏览器缓存。

我删除了 NC 标志 - 这真的应该是不区分大小写的匹配吗?

请注意,如果您的 .htaccess 文件中已有指令,那么顺序很重要。通常,外部重定向需要靠近顶部,当然在 front-controller.

之前