我的旧页面url看起来像这样
https://blabla.com/us/sample-data/us/
我的新网址看起来像这样
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/
怎么才能让这个重定向工作?谢谢
发布于 2021-08-10 12:25:40
重定向301 ^sample/us/ /data/sample/us/ NC,L
但是我得到了一个内部服务器错误
因为该指令在语法上是无效的。[NC,L]参数是属于mod_rewrite RewriteRule指令的参数。Redirect是一个mod_alias指令-- Redirect指令中没有这样的“标志”参数。
RewriteRule ^sample-data/us/ /data/sample/us/ L,R=301,NC
但也没有运气。它也重定向
https://blabla.com/data/sample/us/错过了第一/us/
您似乎忽略了指令中的第一个/us/ (虚拟路径段),所以我完全不知道这是如何重定向的(除非您看到缓存的响应,或者其他什么东西正在执行重定向)?这个.htaccess文件大概在文档根目录中,您大概是在请求/us/sample-data/us/,而第一个/us/是虚拟的,所以上面的指令不可能做任何事情?
如果第一个路径段是可变的,并且您需要重定向到相同的路径段,并且假设它由两个小写的and字母组成,那么请尝试以下操作:
RewriteRule ^([a-z]{2})/sample-data/us/ /$1/data/sample/us/ [R=302,L]但是第二个/us/呢--它也不是可变的吗?/XX/的第一和第二个实例(两个字母)是否应该相同?
先用302 (临时)重定向测试,以避免潜在的缓存问题。在测试之前,您需要清除浏览器缓存。
我已经删除了NC标志--这真的应该是不区分大小写的匹配吗?
注意,如果.htaccess文件中有现有指令,那么顺序就很重要。通常情况下,外部重定向需要靠近顶部,当然是在前面控制器之前.
https://stackoverflow.com/questions/68724798
复制相似问题