.htaccess - 重定向 301 时出现内部服务器错误
问题描述
我的旧页面网址如下所示
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/
如何让这个重定向工作?谢谢
解决方案
<IfModule mod_rewrite.c> Redirect 301 ^sample-data/us/ /data/sample/us/ [NC,L] </IfModule>
但我收到内部服务器错误
因为该指令在语法上无效。[NC,L]
参数是属于 mod_rewriteRewriteRule
指令的参数。Redirect
是一个 mod_alias 指令 - 该指令没有这样的“标志”参数Redirect
。
RewriteRule ^sample-data/us/ /data/sample/us/ [L,R=301,NC]
但也没有运气。它也重定向
https://blabla.com/data/sample/us/
错过第一个/us/
您似乎缺少/us/
指令中的第一个(虚拟路径段),所以我根本看不到这是如何重定向的(除非您看到缓存的响应,或者其他东西正在执行重定向)?该.htaccess
文件可能位于文档根目录中,您可能正在请求 URL /us/sample-data/us/
,而第一个/us/
是虚拟的 - 所以上面的指令不可能做任何事情?
如果第一个路径段是可变的并且您需要重定向到相同的路径段并假设它由两个小写的 az 字母组成,那么请尝试以下操作:
RewriteRule ^([a-z]{2})/sample-data/us/ /$1/data/sample/us/ [R=302,L]
但是第二个/us/
呢?这不是也可变的吗?(两个字母)的第一个和第二个实例/XX/
应该相同吗?
首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。您需要在测试前清除浏览器缓存。
我已经删除了NC
标志 - 这真的应该是不区分大小写的匹配吗?
请注意,如果您的.htaccess
文件中有现有指令,那么顺序很重要。一般来说,外部重定向需要靠近顶部,当然在你的前端控制器之前。
推荐阅读
- excel - 如何根据百分比对学生的排名进行排名
- python - 以编程方式递归查找所有正在使用的函数
- google-colaboratory - 在 Google Colaboratory 机器上打开端口
- docker-compose - 我将springboot jar文件构建到镜像中,但是当我运行它时,我无法连接mysql
- azure - azure - 使用 DB 自动缩放 VM
- javascript - 如何在 vuetify 和 typescript 中以编程方式聚焦 v-textarea?
- jquery - 在表格视图 ASP.NET MVC 中显示从 AJAX 请求到控制器的动态数据
- python - 将置信区间计算为分位数
- python - DataFrame detect when one column becomes bigger than another
- react-native - 是否可以在 Modal (react-native) 中使用 searchableDropdown?