我正在尝试为一系列子目录解析一些外部旧版链接,并重定向到另一个目录,包括原始查询字符串。
作为示例,我具有以下旧结构:
/software/update/{1990..2019}/index.php
*请注意每个index.php完全相同
我们控制外部链接,但由于传统原因不能更改它们。
例如,链接可能是:/software/update/2019/?x=0A123S
我的目标是重定向以下任何请求:
/software/upgrade/YYYY/?x=0A123S
至/help-center/download-update/?x=0A123S
此外,由于WordPress网站上添加了一个/software/
的标签,
RewriteCond %{REQUEST_FILENAME} /software/?$
...就在WordPress规则/条件之前。
在过去的两个小时中,我在SO
,googled
上浏览了数十篇文章,测试了想法,甚至联系了几个同事。
我尝试了以下代码的几种变体,但显然.htaccess/regex
空格中缺少。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
...
# Tested many variations of this
RewriteCond %{REQUEST_URI} /software/upgrade/([0-9]{4})/$ [NC AND]
RewriteCond %{QUERY_STRING} x=([0-9]{1})+([A-Z]{1})+([0-9]{3}) [NC]
RewriteRule /help-center/upgrade/?x=%2 [L, R=301]
# End of testing
RewriteCond %{REQUEST_FILENAME} /software/?$
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
唯一的错误是Internal Server Error
。