如何用PHP变量重写URL,并访问一个外观正常的URL?

时间:2020-04-09 作者:Hanno K

我想将WordPress中未创建的旧数据库网站更改为WordPress。我的网站使用PHP变量,因此URL最初为:

example.com/index.php?tl=1&pg=2&bs=3&hcbs=4&sc1bs=5&sc2bs=6&sc3bs=7&hc=8&blbs=9
但我可以将其重写为外观正常的URL:

example.com/1/2/3/4/5/6/7/8/9.php
为了在旧站点中做到这一点,我在.htaccess 文件:

RewriteEngine on

RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*).php ?tl=$1&pg=$2&bs=$3&hcbs=$4&sc1bs=$5&sc2bs=$6&sc3bs=$7&hc=$8&blbs=$9 [L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*).php ?tl=$1&pg=$2&bs=$3&hcbs=$4&sc1bs=$5&sc2bs=$6&hc=$7&sc3bs=$8 [L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*).php ?tl=$1&pg=$2&bs=$3&hcbs=$4&sc1bs=$5&hc=$6&sc2bs=$7 [L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*).php ?tl=$1&pg=$2&bs=$3&hcbs=$4&hc=$5&sc1bs=$6 [L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*).php ?tl=$1&pg=$2&bs=$3&hc=$4&hcbs=$5 [L]
RewriteRule ^(.*)/(.*)/(.*).php ?tl=$1&pg=$2&bs=$3 [L]
但现在我正在WordPress中尝试这样做。WordPress已经预装了一些重写规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
但是,当我试图以任何方式将两者结合起来时,整个WordPress网站就停止工作了。有人知道如何解决这个问题吗?

1 个回复
SO网友:simongcc

下面是一个向WordPress添加自定义重写规则的示例。例如,您有一个链接http://website.com/1/ WordPress内部将其解释为http://website.com?tl=1

但对于tl 你提到过,我不确定你的设置是什么。所以我想tl 正在您的系统中工作。因为WP默认参数为p 对于页面id

您可以尝试在主题函数中使用以下过滤器。php或插件

以下仅在permalinks打开时有效。否则,无效。这意味着settings -> permalinks, 如果您选择Plain, 然后WordPress将显示没有漂亮URL的查询。它被视为turned off.否则,如果您选择其他选项,如Post Name 然后WordPress将接受帖子名称作为URL,例如https://examples.com/sample-post/如果正在启用(或打开),则为So。然后将使用重写系统。下面的过滤器与WordPress重写系统配合使用。

有时我们会使用其他synonym 喜欢Enable permalinks, Disable permalinks. 它也有同样的含义。

这里,假设放置在functions.php

add_action( \'init\', \'q363603_add_custom_rewrites\' );
function q363603_add_custom_rewrites() {
        // take numbers to the query tl=numbers
        add_rewrite_rule(\'([0-9])+/?$\', \'index.php?tl=$matches[1]\', \'top\');
}

add_filter(\'query_vars\', \'q363603_add_custom_queryvars\' );
function q363603_add_custom_queryvars( $qvars ) {
    // ask WordPress to allow this query parameter
    $qvars[] = \'tl\';
    return $qvars;
}
已编辑:添加permalinks turning on/off explanation