PHP .htaccess -> довольно url (в обратном порядке)

Я знаю, как переписать URL-адрес, например: www.example.com/index.php?id=1&cat=3 на www.example.com/1/3/ (или что-то еще). Я знаю это.

Я не знаю, как на земле изменить все ссылки на всех страницах, чтобы ссылаться на симпатичные URL-адреса. Все ссылки моего сайта – старая мода ( <a href="index.php?id=1&cat=2"> ), и их много.

Я спрашиваю, есть ли у кого-то идея или знаете, как автоматически перенаправить этот симпатичный URL-адрес, если пользователь нажмет на index.php? Id = 1. (Почти как этот сайт Stackoverflow, если вы меняете заголовок в URL-адресе).

Поэтому мои презумпции …

  1. Используйте .htaccess, чтобы прочитать index.php? Id = 1 & cat = 2, чтобы переписать индекс / 1/3, который сам снова интерпретирует (странно)

  2. php-файл для переадресации, который htaccess перезаписывает обратно к оригиналу …

Вывод: изменить <a href="index.php?id=1&....."> автоматически для index/1/2


РЕШИТЬ

 Options +FollowSymLinks RewriteEngine On RewriteBase / ################################## # This turns index.php?id=1&cat=2 into index/1/2 and then back 'transparent' into index.php?id=1&cat=2 if you have old fashioned # links in your site and don't want to change them :) # Avoid mod_rewrite infinite loops # This is critical if you want to use this code RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule .* - [L] # Hard-rewrite ("[R]") to "friendly" URL. # Needs RewriteCond to match original querystring. # Uses "?" in target to remove original querystring, # and "%n" backrefs to move its components. # Target must be a full path as it's a hard-rewrite. RewriteCond %{QUERY_STRING} ^id=(\d+)&cat=(\d+)$ RewriteRule ^index.php$ http://localhost/index/%1/%2/? [L,R] # Soft-rewrite from "friendly" URL to "real" URL. # Transparent to browser. # Won't re-trigger the above rewrite, though I'm # not really sure why! The order of the rules # doesn't seem to make a difference. RewriteRule ^index/(\d+)/(\d+)/$ index.php?id=$1&cat=$2 [L] 

Related of "PHP .htaccess -> довольно url (в обратном порядке)"

 RewriteEngine on # Prevents browser looping, which does seem # to occur in some specific scenarios. Can't # explain the mechanics of this problem in # detail, but there we go. RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule .* - [L] # Hard-rewrite ("[R]") to "friendly" URL. # Needs RewriteCond to match original querystring. # Uses "?" in target to remove original querystring, # and "%n" backrefs to move its components. # Target must be a full path as it's a hard-rewrite. RewriteCond %{QUERY_STRING} ^id=(\d+)&cat=(\d+)$ RewriteRule ^index\.php$ http://example.com/index/%1/%2/? [L,R] # Soft-rewrite from "friendly" URL to "real" URL. # Transparent to browser. RewriteRule ^index/(\d+)/(\d+)/$ /index.php?id=$1&cat=$2 

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

Протестировано с помощью Apache / 2.2.3. Я думаю, что я составил термины «hard-rewrite» и «soft-rewrite».

Почему бы просто не изменить файл index.php для этого? Теоретически вы могли бы сделать еще немного проверки ошибок таким образом, позволяя переменным быть в любом порядке и все же перенаправляться в правильное конечное местоположение.

 <?php // Permanent redirection header("HTTP/1.1 301 Moved Permanently"); header("Location: http://www.example.com/{$_GET['id']}/{$_GET['cat']}"); 

Я не делал никаких ошибок здесь, но хотел дать базовый пример.

С другой стороны, я предполагаю, что это добавление функциональности в файл index.php, который вы затем хотите использовать для своего приложения, поэтому, возможно, это приведет к запутыванию функциональности кода.