htaccess 301 редирект с динамической страницей? - PullRequest
1 голос
/ 03 марта 2012

В htaccess, как вы 301 перенаправляете динамические страницы?

Например, что если бы я хотел, чтобы правило, которое заставило /get.php?i=1234 перенаправить на /i/1234, и так далее?

Ответы [ 2 ]

1 голос
/ 03 марта 2012

Вы можете использовать mod_rewrite как перенаправление, как в этом коде:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^(i)=([^&]+)(&|$) [NC]
RewriteRule ^get\.php$ %1/%2? [L,R=301,NC]
0 голосов
/ 03 марта 2012

Попробуйте директиву RedirectMatch с регулярным выражением . Это зависит от mod_alias , так что это, вероятно, всегда включено. Вы можете использовать mod_rewrite для этого тоже, но это может быть излишним. Замена может содержать ссылки в виде $ n:

RedirectMatch 301 ^/get\.php\?i=([0-9]+)$ /i/$1

Как вы можете себе представить, $1 является ссылкой на то, что соответствует в паре скобок # 1 . Вы можете иметь много ссылок:

RedirectMatch 301 ^/get\.php\?i=([0-9]+)&y=([0-9]+)$ /i/$1/$2/

Вы можете использовать онлайновый тестер регулярных выражений для разработки вашей конфигурации apache: если я введу ^/get\.php\?i=([0-9]+)&y=([0-9]+)$ во вход "Regexp" и /get.php?i=12&y=24 во вход "Subject string", затем нажмите «Показать матч» показывает:

Match at position 0:
/get.php?i=12&y=24
12  # first reference available
24  # second reference available

Если ваши регулярные выражения не работают в тестере, они вряд ли будут работать в конфигурации apache. Сначала вы должны попробовать их в тестере.

...