【问题标题】:.htaccess redirect issues with subdirectories.htaccess 子目录的重定向问题
【发布时间】:2020-08-05 16:38:08
【问题描述】:

我正在尝试重定向以下内容...

  • http://example.com/blog/article-name
  • http://example.com/blog/news/article-name

.. 这很好用..

RewriteCond %{REQUEST_URI} !^/blog/news 
RewriteRule ^blog/(.*) /blog/news/$1 [QSA,L,R=301]

它停止了无限重定向循环......

但是,我不想要这个 URL..

http://example.com/blog/ 

重定向到任何地方,因为这是我列出所有博客条目的登录页面...目前我在这里遇到无限循环。

http://example.com/blog/news/news/news/news/news/news/news/news/news/news/news/news/news/news/news/news/news/news/

我已经尝试添加另一个条件来阻止根页面被重定向...

RewriteCond %{REQUEST_URI} !^/blog/$

但这不起作用...

仅供参考

这是我完整的.htaccess 文件

# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

RewriteCond %{REQUEST_URI} !^/blog/news 
RewriteRule ^blog/(.+) /blog/news/$1 [L,R=301]

有什么想法吗?

【问题讨论】:

  • 这些指令本身不会导致“重定向循环”。这更有可能是由于与其他指令的冲突。请编辑您的问题以包含您的 .htaccess 文件的全部内容以及您在文件系统路径中可能拥有的任何其他 .htaccess
  • 没有问题...应该说它是一个简单的 WP 网站...
  • /blog/blog/news 是否作为物理目录存在,或者它们是 WordPress 虚拟 URL 的一部分?

标签: .htaccess redirect mod-rewrite


【解决方案1】:

感谢大家的帮助...我已经通过更改新的根路径解决了这个问题,所以没有冲突,我的重定向现在工作正常。我认为我遇到的问题实际上与 Chrome 中的缓存 url 路由有关,这些路由仍然在 Incog 模式下发生,所以即使我进行了更改,我仍然被路由到以前的设置。

【讨论】:

  • “更改新的根路径”是什么意思?
【解决方案2】:
RewriteCond %{REQUEST_URI} !^/blog/news 
RewriteRule ^blog/(.*) /blog/news/$1 [QSA,L,R=301]

这些指令在请求/blog/ 时不应导致重定向循环,但是,它们会将您重定向到/blog/news/。为了防止这种不受欢迎的重定向,您只需将子模式 .*(0 或更多)更改为 .+(1 或更多),使其匹配 /blog/&lt;something&gt; 而不是 /blog/&lt;anything&gt;

换句话说:

RewriteCond %{REQUEST_URI} !^/blog/news 
RewriteRule ^blog/(.+) /blog/news/$1 [L,R=301]

这里不需要QSA 标志,因为您没有在 substitution 字符串中添加查询字符串。

更新:您将指令放在错误的位置 - 它们需要 # BEGIN WordPress 部分之前,在您的 .htaccess 的最顶部文件。通过将它们放在最后,它们根本不会被处理。

但是,这仍然不是重定向循环的原因。

不过,您需要确保已清除浏览器缓存。任何错误的 301(可能在测试期间)都将被浏览器永久缓存。首次测试 302(临时)重定向以避免缓存问题。

【讨论】:

  • 我已经更新了我的答案。重定向指令位于错误的位置。而且您确实需要确保您已清除浏览器缓存。
猜你喜欢
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
相关资源
最近更新 更多