【问题标题】:Single URL mod_rewrite keeps going back to the original URL单个 URL mod_rewrite 不断回到原始 URL
【发布时间】:2019-05-30 12:18:16
【问题描述】:

我正在尝试进行非常简单的单个 URL 重写。

就是这样:

RewriteRule ^blog /?post_type=post [NC,L]

我只想让example.com/?post_type=pos 重定向并显示example.com/blog

我已经尝试了许多不同版本的重写,但到目前为止我所取得的成就是我在 example.com/blog 上没有得到 404,而是一直回到 example.com/?post_type=post

我已将RewriteRule 放在.htaccess 文件的顶部,但没有帮助。

这些是我在同一个 .htaccess 文件中的其他重写:

#Single URL
RewriteRule ^blog ?post_type=post [NC,L]

#http www rewrite
RewriteCond %{HTTP_HOST} ^instrumentrentalbarcelona.com [NC]
RewriteRule ^(.*)$ https://www.instrumentrentalbarcelona.com/$1 [L,R=301,NC]


# BEGIN WordPress
<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

【问题讨论】:

    标签: wordpress .htaccess mod-rewrite


    【解决方案1】:

    感谢@DocRoot 帮助我解决这个问题。 DocRoot 和我在下面的评论线程中详细说明了答案。只是想我会总结一下。

    • 我想显示一个包含我所有博客文章的页面。
    • 如果您使用 WordPress 帖子类型“帖子”,则可以做到这一点。 example.com/?post_type=post
    • 我希望当您转到 example.com/blog 时显示该页面。
    • 以下重写可以显示所需的 URL:(再次感谢@DocRoot)

      RewriteCond %{QUERY_STRING} ^post_type=post$
      RewriteRule ^$ /blog [QSD,R,L]
      
    • 但是/blog 给出了 404。所以;

    • 在 WordPress 中创建一个名为“博客”的页面
    • 转到:设置>阅读>您的主页显示>帖子页面:[选择页面“博客”]
    • 保存并完成。

    【讨论】:

      【解决方案2】:
      RewriteRule ^blog /?post_type=post [NC,L]
      

      我只想让example.com/?post_type=pos 重定向并显示example.com/blog

      您发布的指令正好相反。它从/blog&lt;anything&gt;“重写”(而不是“重定向”)到/?post_type=post

      要基于 查询字符串 进行重定向,您需要一个额外的 条件 来检查 QUERY_STRING 服务器变量,因为与 RewriteRule 匹配的 URL pattern 只是 URL 路径。

      请尝试以下方法:

      RewriteCond %{QUERY_STRING} ^post_type=post$
      RewriteRule ^$ /blog [QSD,R,L]
      

      这个“重定向”从example.com/?post_type=post(准确)到example.com/blog

      QSD 标志 (Apache 2.4+) 是从重定向请求中删除查询字符串所必需的。如果您仍在使用 Apache 2.2,那么您需要将 substition 附加到 ? 而不是使用 QSD 标志。例如。 RewriteRule ^$ /blog? [R,L].

      也不是,这是一个临时的 (302) 重定向。如果这应该是永久性的,则将 R 标志更改为 R=301 - 但只有在您确认这一切正常后才能正常工作。

      【讨论】:

      • 谢谢@DocRoot!不确定我是否理解 100%,但我试过了。我的服务器在 Apache 2.4+ 这使得 /?post_type=post 转到 /blog。进步了,但是页面坏了?
      • 如果页面“损坏”,那么大概直接访问/blog 会损坏?以什么方式“破”了?
      • 道歉应该包括这个:screencast.com/t/1VESbupMr5JM没有实际的目录,假设它是重写所以不需要文件夹?
      • 截图显示了一个重定向循环。鉴于上述指令,这似乎是不可能的?您的.htaccess 文件中还有其他内容吗?还有其他.htaccess 文件吗?您是否清除了浏览器缓存?想必您在直接请求/blog 时遇到了同样的错误?
      • 我设法解决了循环(愚蠢的错误,我在 .htaccess 文件的不同部分有旧脚本)。我测试了从 .htaccess 中删除所有内容,除了您在上面看到的内容,并将我的单个 URL 代码替换为您发送给我的代码: RewriteCond %{QUERY_STRING} ^post_type=post$ RewriteRule ^$ /blog [QSD,R,L] 现在 /博客显示 404。您可以在这里查看全部内容:docs.google.com/document/d/… 再次感谢您
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 2012-12-02
      • 1970-01-01
      相关资源
      最近更新 更多