单个网址mod_rewrite会一直返回到原始网址

时间:2018-10-31 12:29:00

标签: wordpress .htaccess mod-rewrite

我正在尝试做一个非常简单的单个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

2 个答案:

答案 0 :(得分:1)

感谢@DocRoot帮助我解决这个问题。答案在下面的DocRoot和I的注释线程中进行了详细说明。我想我将对此进行总结。

  • 我想显示一个页面,其中包含我所有的博客文章。
  • 如果您使用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中创建一个名为“博客”的页面
  • 转到:设置>阅读>您的主页显示>帖子页面:[选择页面“博客”]
  • 保存并完成。

答案 1 :(得分:0)

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

我只是希望example.com/?post_type=pos重定向并显示example.com/blog

您发布的指令完全相反。它从/blog<anything>“重写”(而不是“重定向”)到/?post_type=post

要基于查询字符串进行重定向,您需要一个附加的 condition 来检查QUERY_STRING服务器变量,因为该URL与{{ 1}} 模式仅是URL路径。

请尝试以下操作:

RewriteRule

此操作从“ RewriteCond %{QUERY_STRING} ^post_type=post$ RewriteRule ^$ /blog [QSD,R,L] (完全)重定向到example.com/?post_type=post

需要example.com/blog标志(Apache 2.4+)才能从重定向的请求中删除查询字符串。如果仍使用Apache 2.2,则需要在 substition 后面附加QSD,而不要使用QSD标志。例如。 ?

也不是,这是一个临时(302)重定向。如果这应该是永久性的,则将RewriteRule ^$ /blog? [R,L]标志更改为R-但只有在确认此方法可以正常工作后才能使用。