htaccess - переписать правило и / или условие для исправления совершенно другой прерванной или неправильной входящей ссылки - PullRequest
0 голосов
/ 01 мая 2011

Ну, я снова застрял.Два дня чтения и снова, нашел несколько близких решений, но ничего не подходит, и все мои эксперименты провалились.

Это продолжение моего вопроса: здесь, в 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]

Как видите, два дня чтенияи ничто не утонет для меня.Я попробовал несколько вариантов рабочих правил, которые у меня уже есть, но безрезультатно.

Разве я не могу просто каким-то образом извлечь 123456789 из устаревших URL-адресов .php и вставить его в мои существующие правила?

Спасибо за вашу помощь и объяснения до моего уровня co, я просто мог бы понять ...

1 Ответ

0 голосов
/ 01 мая 2011

Поместите это в конец вашего файла .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.

...