2015-02-20 2 views
1

Я хочу, чтобы на моем сайте были «красивые URL-адреса». Также я хочу сделать так, чтобы пользователи, которые вводят «уродливые» URL-адреса, будут перенаправлены на «красивые URL-адреса».Переадресация на 'pretty-urls' не работает

Упрощенный пример:
У меня есть страница data.php?id=123. Я хочу, чтобы он показывал пользователям, как data/123, и для кого кто набрал адресную строку data.php?id=123, он будет перенаправлен на data/123.

Я попытался следующий код в .htaccess:

# redirect to pretty url 
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ 
RewriteRule ^/?data\.php data/%1? [R=301,L] 

# convert pretty url to normal 
RewriteRule ^/?data/([0-9]+)$ data.php?id=$1 [L] 

Однако он не работает, он переходит в бесконечный цикл, как я понял.

Является ли то, что я хотел, и как, если да?

ответ

2

Использование %{QUERY_STRING} для вашего случая приведет к бесконечному циклу, потому что внутреннее назначение также полагается на него.

%{THE_REQUEST} Однако использование не делает:

# Redirect /data.php?id=123 to /data/123 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+data\.php\?id=([0-9]+) [NC] 
RewriteRule^/data/%1? [R=302,L] 

# Internally forward /data/123 to /data.php?id=123 
RewriteRule ^data/([0-9]+)/?$ /data.php?id=$1 [NC,L] 
+0

Спасибо! Оно работает! Однако я не понимаю '[A-Z] {3,} \ s/+' часть для чего. – Somnium

+0

, который относится к способу, используемому, например, POST, GET и т. Д. – Prix

+0

Спасибо. Однако я понял, что возникла новая проблема. Рабочий путь PHP изменяется на/data /, и по этой причине ссылки на все ресурсы (изображения, css) разбиты (ссылки относительны, меняются на абсолютные значения, но мне нужно сохранять относительные пути). Может ли это быть исправлено без изменения ссылок на страницах веб-сайта? – Somnium

Смежные вопросы