自定义重写规则,URL返回404

时间:2017-01-04 作者:Bryan

我有这样一个自定义URL:

website.com/show/?id=9999&n=page-name
我想想出一个mod_rewrite 要转换为的规则

website.com/show/9999/page-name/
/show/ 是页面名称。

以下是我在中使用的规则。htaccess:

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^show/(.*)$ /show/?id=$1 [R=301,NC,QSA]
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
这起作用了,它重写了

 website.com/show/?id=9999`

website.com/show/9999/
然后,我修改了第二个查询字符串的规则:

RewriteRule ^show/(.*)/(.*)$ /show/?id=$1&n=$2 [R=301,NC,QSA]
但是website.com/show/9999/page-name/ 返回404错误
如果我转到:website.com/show/9999/?n=page-name.

我做错了什么?

1 个回复
SO网友:Bryan

我想我知道了。。。几乎我需要使用WordPress自己的重写引擎来定义重写规则,以便它能够识别我在做什么。

所以我把这个添加到我的WordPress主题中functions.php:

add_action( \'init\', \'init_custom_rewrite\' );

function init_custom_rewrite() {
    add_rewrite_rule(        
        \'^show/([^/]*)/([^/]*)/?\',        
        \'index.php?page_id=2382&id=$matches[1]&n=$matches[2]\',        
        \'top\' );
}

add_filter(\'query_vars\', \'my_query_vars\', 10, 1);

function my_query_vars($vars) {
    $vars[] = \'id\';
    $vars[] = \'n\';
    return $vars;
}
URLwebsite.com/show/9999/page-name 工作正常。

现在,我需要重定向旧的查询字符串URL:website.com/show/?id=9999&n=page-name 到新的SEO友好url:website.com/show/9999/page-name

我在中使用了一些重写规则。htaccess:

RewriteCond %{QUERY_STRING} ^id=([^/]*)&n=([^/]*)$ 
RewriteRule ^showtest/?$ /showtest\\/%1\\/%2\\/? [R=301,L]

相关推荐

如何在我的根域上组合WordPress htaccess+在子文件夹上组合php

我为一个看似重复的问题道歉,但我所看到的几十个问题中,没有一个是同样的问题。我有以下目录结构:/.htaccess /index.php /subfolder/.htaccess /subfolder/index.php 我希望所有页面请求都由/index.php, 除非请求启动/subfolder 在这种情况下,应由/subfolder/index.php.e、 g。/abc 将重写为/subfolder/abce、 g。/subfolder/def 将重写为/subf