Я не уверен, что то, что вы описываете, возможно, используя только правила перезаписи. Но вы можете использовать комбинацию правил переписывания и PHP следующим образом:
Измените файл .htaccess так, чтобы он выглядел следующим образом (ПРИМЕЧАНИЕ. Предполагается, что файл .htaccess находится в корневом каталоге)
<IfModule mod_rewrite.c>
RewriteEngine On
# force www.
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,NC]
RewriteCond %{REQUEST_URI} !^/article/index(-new)?\.php
# this is looking for anything past article that is not a /. You may
# need to change that to be more inclusive - something like (.*)
RewriteRule ^article/([^\/]+) /article/index-new.php?src=$1 [L,NC]
# index.php to /
RewriteRule ^index\.(php|html)$ / [R=301,L]
#RewriteCond %{THE_REQUEST} ^GET\ /.*/index\.(php|html)\ HTTP
#RewriteRule (.*)index\.(php|html)$ /$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://www.mysite.com%{REQUEST_URI}? [R=301,L]
</IfModule>
Ваша статья / index.php станет перенаправителем на ваш новый index.php и будет выглядеть примерно так:
<?php
if (isset($_GET["src"]))
header("location: /article/" . basename($_GET["src"])); // Using basename() in case src happens to be referring to an actual file in your code
else
header("location: /");
?>
Ваш "реальный" индекс будет на самом деле index-new.php, который будет вызывать правило перезаписи.