Custom url rewriting

时间:2013-07-19 作者:Pramod Kumar Sharma

我正在努力为wordpress创建自定义重写规则。

这是我的url结构

http://domain/cityprofile/?city=Sydney 
其中,城市配置文件是一个页面模板。

现在我想将此url设置为

http://domain/Sydney 
。htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

2 个回复
最合适的回答,由SO网友:revo 整理而成

[answer updated as wanted]

最好将函数挂接到generate_rewrite_rules 所以,您不会陷入无限循环中,并在每个请求上刷新重写规则。因此,您可以这样做:

function add_my_rules($wp_rewrite) 
{
    $new_rules = array(
        \'^cityprofile/\\?city=(Sydeny|Melbourne|Brisbane)$\' => $wp_rewrite->preg_index(1) // for 3 cities
    );
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action(\'generate_rewrite_rules\', \'add_my_rules\');
然后通过以下步骤重新生成结构Permalinks structure 节并执行更新。

请注意,这将重定向http://domain.com/cityprofile/?city=Sydneyhttp://domain.com/Sydney 但如果你的意思是从第二个URL重定向到第一个URL,我应该说这是不可能的,因为它在URL中没有什么特殊和明确的内容来编写specefic模式,并且会影响所有其他URL。

因此,我的建议是:

通过为添加重写规则,可以使url更具结构性和可理解性http://domain.com/city/Sydney 这就打开了http://domain.com/cityprofile/?city=Sydeny

Update #2

将此规则替换为中以前的规则。htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(Sydney|Melbourne|Brisbane)$ cityprofile/?city=$1
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

SO网友:tfrommen

首先,您知道这会与页面发生冲突(并且当permalink设置为%postname%, 和某个城市同名的帖子,对吗?

尽管如此,请在functions.php 文件:

add_rewrite_rule(
    \'^cityprofile/(.*)city=([^&]*)(.*)\',
    \'$matches[2]/$matches[1]$matches[3]\',
    \'top\'
);

What does it do?

<获取以开头的URLcityprofile/city 查询变量集
  • 根据需要重写URL
  • 为可能存在的其他查询变量记帐
    • 如果不想为其他查询变量记帐,则应执行以下操作:

      add_rewrite_rule(
          \'^cityprofile/(.*)city=([^&]*)\',
          \'$matches[2]\',
          \'top\'
      );
      

结束

相关推荐

是什么原因会导致htaccess文件被修改?

我最近创建的一个wordpress网站出现了一个500内部服务器错误。经过数小时令人难以置信的思考和检查错误日志,我发现htaccess 已修改用户目录中的文件,其中ss 添加到导致错误的文件末尾。在更改并上传文件后,该网站恢复了。我想知道是什么导致了这一切?它托管在godaddy服务器上,文件的权限为604。是服务器被黑客攻击,还是wordpress以某种方式将其写入文件。谢谢