wordpress - 自定义 RewriteRule 不适用于 WordPress?

标签 wordpress .htaccess mod-rewrite

我正在使用 WordPress 永久链接和带参数的自定义重定向。不幸的是,自定义重定向不起作用。

我的代码:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^domain.com$
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^old_folder/page\.htm$ /new_folder/page/? [L,R=301]

RewriteCond %{QUERY_STRING} (^|&)lang=de($|&)
RewriteRule ^old_folder/page\.htm$ /new_folder/page/? [L,R=301]
...
</IfModule>

代码有问题吗?

最佳答案

您应该将重定向放在 WordPress Dispatcher 之前:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^old_folder/page\.htm$ /new_folder/page/? [L,R=301]

    RewriteCond %{QUERY_STRING} (^|&)lang=de($|&)
    RewriteRule ^old_folder/page\.htm$ /new_folder/page/? [L,R=301]
    ...
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_HOST} !^domain.com$
    RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

就像 @vitozev 所说,否则调度程序将首先捕获请求并由于 [L] 标志而停止处理其他规则。

您应该避免在 # BEGIN# END 注释之间编辑规则。

关于wordpress - 自定义 RewriteRule 不适用于 WordPress?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35433918/

相关文章:

html - 类上的自定义 CSS

php - 尝试在 woocommerce Analytics -> 订单报告表中添加订单项目名称列(并输出到 csv 文件)

.htaccess - 如何让.htaccess RewriteCond检查域名?

.htaccess - 如何在 htaccess 中使用 mod_rewrite 阻止用户代理

html - Wordpress 如何使 slider 全宽(Metaslider)

php - 如何使用 WP_Query 对 post_IDs 键而不是值进行排序

wordpress 网站有多个重定向

php - Codeigniter htaccess 删除 index.php 和 www

php - 将 .php 重写为 .html 并将 .php 重定向到 .htaccess 中的 404

php - 如何根据查询字符串中的匹配使用 SetEnvIf?