使用htaccess问题重写网址

时间:2017-10-04 08:40:11

标签: wordpress apache .htaccess url-rewriting

第一次将我的脚趾浸入.htaccess URL重写的世界,并在第一个障碍下跌。但是我确定我错过了一些明显的东西...... :)

我的htaccess目前看起来像这样,这是一个从/ wordpress运行的Wordpress安装,但重写后出现在域的顶层:

php_value short_open_tag 1

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) wordpress/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ wordpress/$2 [L]
RewriteRule . index.php [L]

</IfModule>

我想添加重写规则以吸引任何人访问: /publication-details.php?id=xxx(其中xxx是一个数字 至 /出版物/酒馆-XXX /

我认为这样的事情会起作用:

RewriteRule ^publication-details.php?id=([0-9]+) /publications/pub-$1 [NC]

但我已经尝试过这个规则,但它不起作用 - 无论我在现有规则中的哪个位置订购它。试图访问/publication-details.php只获得404(Apache默认值)。如果我尝试/不管(即URL中没有扩展名),我会得到Wordpress 404。

我缺少什么?!

提前致谢。

2 个答案:

答案 0 :(得分:1)

将永久链接编辑为%postname%

add_filter( 'rewrite_rules_array','my_insert_rewrite_rules' );
add_action( 'wp_loaded','my_flush_rules' );

function my_insert_rewrite_rules( $rules )
{
       $newrules = array();
       $newrules['([^/]+)/publication/pub-([^/])/?$'] = add_rewrite_rule( '([^/]+)/publication/pub-([^/])?$', 'index.php?pagename=$matches[1]&pub-id=$matches[3]', 'top' );
       return $newrules + $rules;
}        

add_action( 'wp_loaded','my_flush_rules' );

// flush_rules() if our rules are not yet included
function my_flush_rules(){
    $rules = get_option( 'rewrite_rules' );
    if (! isset( $rules['([^/]+)/publication/pub-([^/])/?$'] )) {
            global $wp_rewrite;
            $wp_rewrite->flush_rules();
    }
}

答案 1 :(得分:0)

RewriteRule仅适用于URI,而不适用于查询字符串。

要做你想做的事,你需要一个RewriteCond(= Condition)来检查查询字符串,例如

RewriteCond %{QUERY_STRING} id=([0-9]+)
RewriteRule ^publication-details.php /publications/pub-%1? [R=302,L]

RewriteCond是以下RewriteRule的条件。请注意,规则中的%1,而不是$ 1,使用条件匹配($ 1仅适用于规则中的匹配)。我在末尾添加了一个引号来禁用添加查询字符串,否则它将重定向到/ publications / pub-12345?id = 12345。