我正在将我们的网站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