Модифицировать URL переадресации с строкой запроса до симпатичного URL-адреса

Я успешно сменил URL-адреса от уродливых с несколькими параметрами в querystring, чтобы очистить их с помощью mod rewrite. Однако для моего сайта есть много URL-адресов. Вместо того, чтобы вернуться и отредактировать атрибут href для каждого из моих привязанных тегов, я попытался написать функцию перенаправления в файле .htaccess, который автоматически перенаправляет старый URL-адрес на новый.

В моем файле .htaccess у меня есть следующее:

RewriteEngine On

Redirect teams.php?league=$1&team=$2&year=$3&tab=$4 teams/(.*)/(.*)/(.*)/(.*)

RewriteCond %{REQUEST_URI} !^(css|js|img)/
RewriteRule ^teams/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ teams.php?league=$1&team=$2&year=$3&tab=$4 [L]

Не повезло, хотя... какие-то мысли?

Спасибо

Ответы

Ответ 1

Вам нужно проверить, что старый URL-адрес с php в нем фактически запрашивается путем сопоставления с %{THE_REQUEST}, иначе он будет перенаправлять цикл навсегда (например, пользователь переходит к команде .php, перенаправляет адреса на команды, команды запросов браузеров, перезаписывает сервер как teams.php, сервер видит "teams.php" и перенаправляет команды, команды запросов браузеров, перезаписывает сервер как teams.php и т.д.).

RewriteEngine On

# redirect when the user actually requests for teams.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /teams\.php\?league=([^&]+)&team=([^&]+)&year=([^&]+)&tab=([^\ ]+)
RewriteRule ^teams\.php$ /teams/%1/%2/%3/%4? [R=301,L]

# internally rewrite any /teams/ URI
RewriteCond %{REQUEST_URI} !^(css|js|img)/
RewriteRule ^teams/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ teams.php?league=$1&team=$2&year=$3&tab=$4 [L]