【问题标题】:htaccess redirect 301 is working but RewriteRule is nothtaccess 重定向 301 有效,但 RewriteRule 无效
【发布时间】:2021-10-25 22:16:06
【问题描述】:

在我使用redirect 301 声明之前。 现在我需要使用 RewriteRule 语句来使用标志(在没有查询字符串的情况下重定向), 但由于某种原因,它不起作用。

这是我的.htaccess 文件:


# BEGIN WordPress
# Директивы (строки) между `BEGIN WordPress` и `END WordPress`
# созданы автоматически и подлежат изменению только через фильтры WordPress.
# Сделанные вручную изменения между этими маркерами будут перезаписаны.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


#this is working
redirect 301 /bad-link/  http://localhost:8000/

#this is not working
RewriteRule ^test/bad-link.*$ "http://localhost:8000" [NC,QSD,L,R=301]

#this is also not working
RewriteRule "test/bad-link" "http://localhost:8000" [R=301]

</IfModule>

# END WordPress

【问题讨论】:

  • 而“不工作”究竟意味着什么

标签: wordpress apache .htaccess redirect mod-rewrite


【解决方案1】:

您的指令顺序错误。 mod_rewrite 重定向(即RewriteRule 指令)需要 WordPress 前端控制器重写之前进行。通过将它们放在 WordPress 指令之后,它们将永远不会被处理,因为请求已经被重写到 WP 前端控制器 (index.php) 并且处理停止。

您不应编辑 # BEGIN WordPress / # END WordPress 代码块内的代码,因为 WordPress 本身会尝试维护此代码块,您的编辑可能会被覆盖。

您应该将RewriteRule 301 重定向指令放在# BEGIN WordPress 评论标记之前。您无需在 WordPress 代码块内重复稍后出现的 RewriteEngine On 指令。

mod_alias Redirect 指令会“起作用”,因为它不依赖于与其他 mod_rewrite 指令相关的指令顺序。无论配置文件中指令的顺序如何,不同的 Apache 模块在请求期间独立运行并在不同时间运行。 mod_rewrite mod_alias 之前运行,Redirect 始终运行,无论前面的 mod_rewrite 指令的结果如何(除非它们触发外部重定向)。

换句话说:

# External redirects...
RewriteRule ^test/bad-link http://localhost:8000/ [NC,QSD,R=301,L]

# BEGIN WordPress
: etc.

请注意,正则表达式末尾的 .*$ 是多余的。

注意:首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。

【讨论】:

  • 非常感谢您,重定向有效,但现在“test/bad-link”之后的所有内容都被重定向,例如(test/bad-link/good-link)我怎样才能只进行重定向对于这个链接测试/坏链接
  • @МохамедРусланович 要匹配test/bad-link,然后将$(字符串结尾锚)附加到RewriteRule 模式(正则表达式)的末尾。 IE。 ^test/bad-link$ 而不是 ^test/bad-link。 (我只是在重复您在问题中使用的正则表达式,因为您实际上并没有说明您要匹配的 URL。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 2013-03-14
  • 2019-08-26
  • 1970-01-01
相关资源
最近更新 更多