2013-09-27 4 views
1

Я пытаюсь понять, как работает mod_rewrite. Например, если у меня есть URL-адрес, как:Перенаправление URL-адресов после mod_rewrite?

example.com/user.php?id=123 

И с mod_rewrite я могу создать URL как:

example.com/user/123 

Теперь это нормально, но в других местах в моем приложении, у меня есть связан с пользовательской страницы с использованием старого формата, например:

<a href="user.php?id=123">123</a> 

Теперь это означает, что я должен был бы изменить все эти ссылки вручную и должны связать в соответствии с новым форматом? например:

<a href="user/123">123</a> 

Или это должно быть сделано с помощью mod_rewrite? Я не использую фреймворк PHP.

ответ

2

На долгосрочной перспективе да вы бы изменить это, но вы также можете перенаправить что:

Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

# Externally redirect /user.php?id=123 to /user/123 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(user)\.php\?id=([^&\s]+) [NC] 
RewriteRule^/%1/%2? [R=301,L] 

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

внешний редирект тот, который изменяет URL в браузере, внутренне это тот, который делает не изменять URL-адрес, а показывать содержимое другого места.

Хотя выше будет перенаправлять пользователь из:

example.com/user.php?id=123 

Для

example.com/user/123 

Было бы к лучшему, если вы измените ваши ссылки, чтобы использовать SEO дружественные те, чтобы избежать дополнительной переадресации все время пользователь получает доступ или перемещается по вашему сайту.

+0

Спасибо, его Теперь ясно. Я не буду использовать .htaccess для перенаправления URL-адресов, вместо этого я поменяю их на новый формат в своем приложении. – user2738640

+0

@ user2738640 [вот еще один ответ, на который я ответил, который также может вас заинтересовать.] (Http://stackoverflow.com/questions/18499398/create-blog-post-links-similar-to-a-folder- структура). Если проще, если у вас есть контроллер, вы можете сделать так, чтобы ваша собственная система маршрутизации из вашего кода использовала простое правило на вашем. .htaccess. – Prix

-2

найти все ссылки в БД и заменить

UPDATE `myTable` 
SET myCol = REPLACE(myCol, '<a href="user.php?id=', '<a href="user/') 
WHERE keyCol = testKey; 

сделать всю таблицу, удалите WHERE пункт

я думаю, что будет работать, я не играть с SQL много в настоящее

+1

. Т.е. если он использует MySQL для хранения ссылок, и если так, как вы предполагали, он это делает. – Prix

+0

да я сделал предположительно. Я предположил, что если вы хорошо разбираетесь в db, вы не спросите об этом, и если бы вы использовали другой тип db, такой как PostgreSQL, вы все равно не спросили бы, потому что вы хороши с db;) и я не против плоских файлов, но db намного более гибкие. .. ко многим предположениям, я вырежу это – gwillie

+0

Он никогда не говорил, что использует db для того, что он задает вопрос '.htaccess' с частью того, как выглядит его HTML в настоящее время. Он также никогда не помещал его никакими тэгами db. – Prix

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