PHP:使用变量查询字符串重写规则



我正在将我们的网站URL结构从这个site.com/?team=john-doe更改为site.com/attorney/john-doe。我在htaccess文件中有典型的WordPress Htaccess重写规则,但我遇到的问题是我们有多名律师,他们的?team=后跟名称。我正在尝试执行一个规则来重定向所有名称为变量 - 如果这有意义的话。

site.com/?team=jane-doe
site.com/?team=nic-cage

下面我注释了一个方法,但是当我尝试它时,我得到了500内部服务器错误:

# 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]
#RewriteCond %{REQUEST_URI} ^/$
#RewriteCond %{QUERY_STRING} ^?team=([x]*)$
#RewriteRule ^(.*) site.com/attorneys/$1 [R=302,L]
</IfModule>
# END WordPress

我还应用了这个正则表达式:

RedirectMatch 301 ^/?team=(.*)$ site.com/attorneys/$1

正则表达式非常令人困惑,对不起,如果我没有任何意义。如果需要,我可以尝试澄清。

RedirectMatch 仅适用于 uris.您无法使用此指令访问查询字符串。您可以使用以下重写规则,在wordpress规则之前添加此规则:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^team=(.+)$
RewriteRule ^ http://example.com/attorneys/%1? [L,R]

我不太确定,但你能试试这个
RewriteRule ^/?team=(.*)$ http://Yoursitename/attorneys/$1 [R=301,L]

这只是

一个猜测,但我认为主要的问号?

RewriteCond %{QUERY_STRING} ^?team=([x]*)$

500服务器错误的原因,因为?是一个特殊字符。

?表示前面的元素是可选的,但由于^?team=中没有前面的元素,这是一个错误。如果要匹配文字问号,则必须使用反斜杠?对其进行转义。

虽然,在这种情况下(QUERY_STRING(,这不是必需的,因为QUERY_STRING不包含前导问号,只包含查询字符串本身。这意味着检查team=(.*)就足够

RewriteCond %{QUERY_STRING} ^team=(.*)$

该规则还有其他问题

  • RewriteCond %{REQUEST_URI} ^/$将仅匹配主页,没有其他内容
  • RewriteRule ^(.*) site.com/attorneys/$1 [R=302,L]不会重定向到site.com,因为它缺少http://
  • 最后,RewriteCond 中匹配项的反向引用是 %1 而不是 $1

最新更新