在Wordpress安装中mod_rewrite替换多个键/变量

时间:2014-10-05 19:54:34

标签: php wordpress .htaccess mod-rewrite

我正在尝试创建mod_rewrite规则以在我的wordpress网站中重定向以下网址:

www.mywebsite.com/pg/2/row/20/filter/all/filtercity/foo,bar

www.mywebsite.com/detail?pg=2&row=20&filter=all&filtercity=foo,bar

我的问题是wordpress在.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

我尝试了以下RewriteRule,如果我从Wordpress评论最后一个RewrireRule,它会有用。

# 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]]
RewriteRule ^pg/([a-zA-Z0-9]+)/?$ ?pg=$2 [R]
</IfModule>

# END WordPress

以上内容仅适用于

等网址

www.mywebsite.com/pg/2 =&gt; www.mywebsite.com?pg=2

几个问题:

1 - 如何配置.htaccess仅在找到以下密钥时处理该网址

/ pg和/或/ row和/或/ filter和/或/ filtercity

对于所有其他网址,它应该执行标准的Wordpress RewriteRule。的index.php

2 - 网址也可以包含所有密钥或仅包含其中的一些密钥。例如:

/ PG / 2 /行/ 20

/行/ 20 /过滤器/所有

如何配置.htaccess来处理所有不同的密钥组合?

3 - 当我尝试更换

RewriteRule ^pg/([a-zA-Z0-9]+)/?$ ?pg=$2 [R]

RewriteRule ^pg/([a-zA-Z0-9]+)/?$ detail?pg=$1 [R]

我从服务器收到404错误。不知道为什么。有什么想法吗?

谢谢。

编辑1:

我尝试将[L]添加到我的RewriteRule的末尾(见下文)

RewriteRule ^pg/([a-zA-Z0-9]+)/?$ ?pg=$1 [R,L]

并将标准Wordpress重写规则移至下一行

RewriteRule . /index.php [L]

执行此操作后,我不再收到服务器404错误。但是CSS文件会停止加载。

1 个答案:

答案 0 :(得分:0)

  

1 - 如何配置.htaccess只在它处理url时   找到以下键

     

/ pg和/或/ row和/或/ filter和/或/ filtercity

阅读此Rewrite URL with .htaccess for multiple parameters

上述答案可帮助您在使用标准网址格式时解决问题。

  

2 - 网址也可以包含所有密钥或仅包含其中的一些密钥。对于   例如:

     

/ PG / 2 /行/ 20

     

/行/ 20 /过滤器/所有

您正在尝试使用URL语义执行某些操作。当您尝试访问资源时,路径应该每次都相同。如果您在起始页面上,则可以传递pg / 0 /。但谁可以阻止你走出URL语义? :)在这种情况下,你必须在.htaccess中将所有组合作为规则。按照上面的解决方案,所有网址组合都可以使用。

我的建议:

  • 如果你不熟悉,不要与.htaccess斗争,你的需要只是重写URL(虽然它很强大)
  • 将所有内容传递到索引文件并解析代码,您的案例请查看此页面http://codex.wordpress.org/Query_Overview