【问题标题】:Wordpress URI to Query Rewrite in htaccess在 htaccess 中查询重写的 Wordpress URI
【发布时间】:2014-06-12 05:14:55
【问题描述】:

我很想在现有的 Wordpress 重写块中添加一个重写规则。我有一个特殊的页面,它需要动态参数但对 SEO 友好的 url。

所以

http://unitedathletes.ch/athleten/var_sportart/var_name

应该变成

http://unitedathletes.ch/athleten/?sportart=var_sportart&name=var_name

http://unitedathletes.ch/athleten/

是一个现有页面,其中包含处理查询参数的必要逻辑。

现有的 wordpress htaccess 重写块如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On

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

</IfModule>

在该块中的什么位置以及如何添加希望的规则?我尝试了很多东西,但自己无法弄清楚。

更新 1

尝试 add_rewrite_rule(),无法正常工作:在 functions.php 中:

add_action( 'init', 'add_rewrite' );
function add_rewrite(){
    add_rewrite_rule('^athleten/([^/]*)/([^/]*)/?','index.php?page_id=340&sportart=$matches[1]&athlet=$matches[2]','top');
    add_rewrite_tag('%sportart%','([^&]+)');
    add_rewrite_tag('%athlet%','([^&]+)');
}

更新 2

只需要刷新重写规则。感谢大家的帮助。

flush_rewrite_rules();

【问题讨论】:

  • domain.com/members/?sporttype=sporttype&amp;name=name_familyname 是 WP 帖子/页面吗?
  • 你为什么不使用 add_rewrite_rule()? codex.wordpress.org/Rewrite_API/add_rewrite_rule
  • 只是一个简短的说明 - 你不应该 flush_rewrite_rules () o
  • 谢谢戴夫。根本没有或没有定期?

标签: wordpress .htaccess rewrite


【解决方案1】:

您描述中的标记与示例代码中的标记完全不匹配。它是术语和语言的混合体。也许这就是所有必须解决的问题,所以这里是一个尝试。但是,除非您指定更多详细信息以及您的实际问题是什么,否则我们无能为力...

RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^members/([^/]+)/([^/]+)$ /members/?sporttype=$1&name=$2 [L,NC,QSA]

再一次,这只是一个粗略的猜测,因为您的问题中缺少重要的细节。

当人们使用 .htaccess 样式文件时,我总是附上一条一般性说明:如果您有权访问服务器配置,则始终将此类规则放在主机配置中。 .htaccess 风格的文件是出了名的容易出错,它们使事情变得复杂,难以调试并且真的减慢了服务器的速度。使用此类文件的唯一原因是您必须在动态基础上修改规则,或者您无权访问/无法控制服务器配置。

【讨论】:

    【解决方案2】:

    变化

    RewriteRule ^athleten/([^/]*)/([^/]*)$ /?page_id=295&sportart=$1&athlet=$2 [L,NC]
    

    RewriteRule ^members/([^/]*)/([^/]*)$ /members/?&sporttype=$1&name=$2 [L,NC]
    

    应该可以。

    您希望最终结果为domain.com/members/?sporttype=sporttype&amp;name=name_familyname,但您将athleten/sporttype/name_familyname 变成/?page_id=295&amp;sportart=$1&amp;athlet=$2

    【讨论】:

      【解决方案3】:

      将此添加到functions.php

      add_action( 'init', 'add_rewrite' );
      function add_rewrite(){
          add_rewrite_rule('^athleten/([^/]*)/([^/]*)/?','index.php?page_id=340&sportart=$matches[1]&athlet=$matches[2]','top');
          add_rewrite_tag('%sportart%','([^&]+)');
          add_rewrite_tag('%athlet%','([^&]+)');
          flush_rewrite_rules();
      }
      

      无需涉足 .htaccess

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        相关资源
        最近更新 更多