无法在 htaccess 中为不同的文件夹设置重写规则

无法在 htaccess 中为不同的文件夹设置重写规则

我们将网站的一部分从一个子文件夹移到了另一个子文件夹。我想将永久重定向 (301) 放入此文件夹中文件的 htaccess 中(有些文件也更改了文件名,因此我不能只为整个文件夹设置一个规则)。以下是我正在尝试的操作

RewriteRule ^search/tutorial-search.html$ db/tutorial.php [R=301]

但这并不奏效,当我输入旧 URL 时,我得到了 404 响应。我觉得这很奇怪,因为我有一个已经实施了很长时间的规则,它确实有效,如下所示:

RewriteRule ^search/tutorial-search.html$ search/tutorial-search.php

我真的看不出有什么大的区别。我还尝试了以下方法(以及其他方法),但也没有用

RewriteRule ^search/tutorial-search.html$ db/tutorial.php

到底是什么原因导致失败?我只是想确保将所有这些都放在 htaccess 文件的同一行。是不是因为我要重写到另一个文件夹?谢谢 :)

答案1

1)请发布您的整个.htaccess

我猜你没有用正确的指令包裹这些内容。

如果你想重定向流量,你不应该使用重写规则,因为这只会重写 URL。你真正想要的是重定向规则

RedirectMatch 永久 oldfolder/oldfile.html "http://www.mysite.com/newfolder/newfile.html“......(插入每个已更改的名称)RedirectMatch permanent /oldfolder/*”http://www.mysite.com/newfolder

这将为您提供所需的 301 重定向。重写实际上会更改浏览器请求的 URL。重定向会重新指向 URL 并告诉浏览器/搜索引擎,“嘿,这个东西已经移动了。现在它在这里了。”

答案2

您没有将重定向定义为 301。RedirectMatch 后的“永久”标志在 Apache 标头中执行此操作。

如果某处服务器上的某条线路正常运行,而另一处服务器上的某条线路却断了,那么显然缺少了某些东西。

尝试从旧位置复制整个 .htaccess 文件,并删除所有重写规则(只保留一条)。然后编辑这条规则即可。

不幸的是,如果看不到 .htaccess 中还有哪些内容或没有什么内容,就无法诊断出导致问题的原因。

相关内容