【问题标题】:Redirect .htaccess through partial modification of the link in its middle通过部分修改中间的链接重定向.htaccess
【发布时间】:2020-02-03 17:03:24
【问题描述】:

请告诉我正确的方法。我正在尝试重定向

来自

example.com/home/<anything>

example.com/home-3/<anything>

RegExp 对我来说仍然非常困难,而且在 .htaccess 条件句中。

请告诉我这样做的正确方法

我的基本想法没有发挥好:

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_URI} !/home-3/ [NC]
 RewriteRule (.*)/home/(.*) $1/home-3/$2
 </IfModule> 

它与以下内容无关:

https://example.com/home/information/work

但必须成为

https://example.com/home-3/information/work

但是 php-redirect 可以通过以下方式正确完成: (header.php)

IF ( ($do_redirect=true) == true) {{{
            $address=$_SERVER['REQUEST_URI'];

            $addrstart = substr($address,0,15);
            $sch = strpos($addrstart,'home/');


            if ($sch!== false) {
                $ndl = 'home/';
                $nw = 'home-3/';
                    $rezz = str_replace($ndl,$nw,$address);
                    $address = $rezz;

                    header("Location: https://egf.ru/".$urrr);
                    die;
            } 

}}}

所以我尝试通过 .htaccess 而不是标题位置来做同样的事情。

添加: 我通过私人标签尝试了所有这种组合,并关闭了最后一个私人窗口并每次都重新打开。

我还尝试在 ht2 图像上检查重定向之一 - 它也给了我 404/

我认为 或 htaccess 不知何故真的不适用于 wordpress (0_o) 或者我失去了一些基本的东西/

因此受到启发,再次重新检查 我做了下一个: 取消注释所有变体:

它在家里也什么都不做(404)/..寻址 所有 home-3 工作正常

更新 7 分钟内服务器崩溃 ftp 没有响应,站点 egf.ru 没有响应。 接下来是最后的 htacces 修改: 看起来没有循环递归 所有 htaccess 检查器都说没有错误。

不知道是供应商的错还是我的错。

【问题讨论】:

  • 您的.htaccess 文件在哪里?在文档根目录?还是在这个/home/home-3 目录中?
  • wordpress 两者都没有。既不是 home,也不是 home-3——它们都不是真实存在的。 htaccess 基于站点的主根目录。我会尝试在主帖中添加图片。

标签: .htaccess redirect mod-rewrite


【解决方案1】:

阅读大量手册以了解该主题 并编写适当的命令。

请原谅我问了这么愚蠢的问题。真的很花时间去弄清楚)

但完整和最终的结论是通过.htaccess debugger =))

所以最终的工作代码 =>

RewriteBase /

RewriteCond %{REQUEST_URI} !^/home-3 [NC]
RewriteCond %{REQUEST_URI} !^$ 
RewriteRule "^home(.*)" "home-3$1" [L]

【讨论】:

  • 这是一个内部重写(URL 不变),而不是外部“重定向”,如您的问题所述?您的 PHP 代码还执行外部“重定向”(不是内部重写)。 (?)
  • 你是对的,php 做外部重定向(因为我不知道 php 是否可以做内部重定向:))为此我希望 .htaccess 在其中任何一个中都能成功。但我仍然无法使用 htaccess =(
  • 此外 - RewriteRule (.*) /anypage [R=301,L] 和 RewriteRule (.*) /anypage [L] 似乎都不起作用而且我找不到调试它的方法阿帕奇=(
  • 重定向 302 /home/ /home-3/ 也不起作用。看起来以前或现在在 htaccess 中(位于基本目录)中没有任何规则 - 没有任何作用 =(怎么可能。我怎样才能获得调试数据?
  • 这些RewriteRule 指令都不起作用,因为它们将分别创建重定向循环和重写循环(500 错误)。您不应在 WordPress 中使用 Redirect,因为可能与现有指令发生冲突。您有权访问服务器配置吗?您可以在服务器配置中启用 mod_rewrite 调试(不是.htaccess)并检查服务器的错误日志以获取调试信息。但是当你说“没有用”时——到底发生了什么?一个错误?什么都没有?
【解决方案2】:

要从/home/&lt;anything&gt;“重定向”到/home-3/&lt;anything&gt;,您可以在.htaccess 文件顶部使用mod_rewrite 执行以下操作:

RewriteEngine On

RewriteRule ^home/(.*) /home-3/$1 [R=302,L]

虽然您不一定需要 mod_rewrite,但一个简单的 mod_alias Redirect(前缀匹配)就足够了:

Redirect 302 /home/ /home-3/

/home/&lt;anything&gt; 被隐式重定向到 /home-3/&lt;anything&gt;,因为 Redirect 指令的前缀匹配特性。匹配后的所有内容都被复制到目标 URL 的末尾。

但是,我怀疑您已经有其他 mod_rewrite 重写(为了路由 URL),因此您可能需要上面的 mod_rewrite 解决方案以避免冲突。


查看您的指令...

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_URI} !/home-3/ [NC]
 RewriteRule (.*)/home/(.*) $1/home-3/$2
 </IfModule>

这不会匹配/home/information/work,因为正则表达式(.*)/.... 中的第一个斜杠前缀。但是您的示例 URL 在 URL 路径的 start 处显示 /home/,因此在它之前没有什么可以匹配的。所以,^home/(.*) 就足够了。 ^ 是字符串开头 anchor ,因此该模式必须出现在 URL 路径的开头。

RewriteCond %{REQUEST_URI} !^/home-3 [NC]
RewriteCond %{REQUEST_URI} !^$ 
RewriteRule "^home(.*)" "home-3$1" [L]

您删除的答案中的“工作”代码有这个更复杂的规则。但是,这匹配/home&lt;anything&gt;,而不是/home/&lt;anything&gt;(如您的问题所述) - 这确实使问题复杂化。然后需要第一个条件(RewriteCond 指令)来防止重写循环*1。这里不需要第二个条件,因为如果 RewriteRule 已经匹配,则条件必须为真。

*1 请注意,此规则是内部重写(URL 不会对用户可见地改变),而不是外部“重定向” “如您的问题所述。请注意,您所说的 PHP 代码可以正常工作,是外部“重定向”,而不是重写。

【讨论】:

  • 非常感谢。你知道,我面临的最糟糕的事情(这就是删除所有内容的原因) - 我编写的所有代码变体以及其中一些都在工作 - 现在 - 根本不工作 - 他们没有一个=(((( ( 好像我失去了一些对我来说非常重要、小而未知的东西 =(
  • 我了解外部重定向和内部重定向(重写)的问题。我认为要治愈 seo,我应该从 /home/ 到 /home-3/ 进行内部重定向,因为 wordpress 网站突然损坏并将所有链接从 home/ 更改为 home-3/ 。我无法治愈它。所以我决定为谷歌网站管理员做隐藏的内部重定向,而 Yandexe 网站管理员会认为一切都很好,我们不会失去我们的职位(
  • 确保您已清除浏览器缓存(如果您之前尝试过 301 - 永久 - 重定向,那么这些将被浏览器缓存)。这些指令也应该在您的.htaccess 文件的顶部 现有重写之前。对于 SEO,您应该使用“重定向”,而不是“重写”,否则您可能会创建 重复内容。 (首先重定向/重写的原因是什么?内容移动了吗?)。
  • "WordPress" - 啊,这就是 rewrites 的问题 - 如果你使用 WordPress,你不能在内部重写 URL,因为 WordPress 路由 URL 的方式。如果您重写.htaccess 中的 URL,那么 WP 仍然会看到请求的原始 URL,而不是重写的 URL,因此可能会导致 404。(如果您特别需要“重写”,则需要完全在 WP 中执行此操作- 尽管 WP 以自己的方式进行 - 从技术上讲,它不是 Apache URL 重写。)您仍然可以在 .htaccess 中使用“重定向” - 这应该仍然有效。
  • 谢谢你的关心)它揭示了我无知的迷雾!))原因是 - stackoverflow.com/questions/60022815/…
猜你喜欢
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多