我正在尝试做一个非常简单的单个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
答案 0 :(得分:1)
感谢@DocRoot帮助我解决这个问题。答案在下面的DocRoot和I的注释线程中进行了详细说明。我想我将对此进行总结。
example.com/?post_type=post
example.com/blog
时显示该页面。以下重写可显示所需的URL :(再次感谢@DocRoot)
RewriteCond %{QUERY_STRING} ^post_type=post$
RewriteRule ^$ /blog [QSD,R,L]
但是/blog
给出了404。
答案 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
-但只有在确认此方法可以正常工作后才能使用。