0

好吧,我又卡住了。两天的阅读,再一次,找到了一些接近的解决方案,但没有任何合适的,我所有的实验都失败了。

这是我的问题的延续: 在stackoverflow

以下 4 条规则采用我的传入链接:

  http://somedomain.com/getme.pl?dothis=display&partnum=1234567

并宣扬它。还允许用户在地址栏中直接使用美化版:

http://somedomain.com/1234567

以下是我的工作规则:

RewriteRule ^([\s]*)$ /getme.pl [L] ## in case there is a space or nothing.
RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1&rewrite [L]
RewriteCond %{QUERY_STRING} partnum=([0-9]*)$
RewriteRule (.*) /%1? [L,R=301]

效果很好,但我发现那里有一些旧链接到该网站:

http://somedomain.com/oldversion.php?id=123456789

http://somedomain.com/oldversion.php?r=86this&id=123456789

我只想抓住 id=[0-9] 并将其与我的工作规则集成。我想,该规则将插入上面的第二条和第三条规则之间。

我尝试了各种尝试(大约 100 次!),例如:

RewriteRule ^(oldversion\.php)?([a-z]{1})=([a-z0-9]*)&([a-z]{2})=([0-9]*)$ /$4? [L]

RewriteRule ^(oldversion\.php)?([a-z]{2})=([0-9]*)$ /$3? [L]

如您所见,两天的阅读对我来说没有任何影响。我也尝试了我已经拥有的工作规则的几种变体,但无济于事。

我不能以某种方式从过时的 .php 网址中获取 123456789 并将其粘贴在我现有的规则中吗?

感谢您的帮助并解释到我的水平,我可能能够理解......

4

1 回答 1

0

将其放在 .htaccess 文件的末尾:

RewriteCond %{QUERY_STRING} id=([^&]+)(&|$) [NC]
RewriteRule ^oldversion\.php$ /%1? [L,R=301,NC,NE]

对于它的 URI,/oldversion.php?r=86this&id=123456789它将在内部重定向/123456789

记住 RewriteRule 只匹配你的 URI,它不能匹配你的 QUERY_STRING。

于 2011-05-01T04:10:54.927 回答