1

我最近问了一个关于让特定的重写工作的问题。我确实得到了一个可行的答案,并在我的一个网站上使用了它。现在我正在尝试重用这种方法,但我发现逻辑正在落入 Wordpress 重写部分,并且我自己的重定向根本没有被触发。

# BEGIN Redirect deprecated site links to wp equivalent
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^news=13$
RewriteRule ^news_comments.php$ http://example.com/example-directory/ [R=301]
RewriteCond %{QUERY_STRING} ^news=51$
RewriteRule ^news_comments.php$ http://example.com/example-page.php [R=301]
</IfModule>
# END Redirect deprecated site links to wp equivalent

# 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 重写,但我需要触发我在顶部指定的那些并跳过 Wordpress 规则。

我四处搜索并看到了一些使用类似...的建议

...
RewriteCond %{QUERY_STRING} ^news=51$
RewriteRule ^news_comments.php$ http://example.com/example-page.php [R=301]
RewriteRule ^news_comments.php$ - [L]
</IfModule>

...但我似乎无法让它工作。有任何想法吗?

4

1 回答 1

1

您需要确保在[L]重定向的末尾添加标志,否则 URI 会继续通过其余规则,并且重定向会在末尾发生。到那时,wordpress 已经使用 URI。

RewriteCond %{QUERY_STRING} ^news=13$
RewriteRule ^news_comments.php$ http://example.com/example-directory/ [R=301,L]
RewriteCond %{QUERY_STRING} ^news=51$
RewriteRule ^news_comments.php$ http://example.com/example-page.php [R=301,L]
于 2012-08-02T02:14:56.913 回答