Перенаправление — всего 4 параметра

#.htaccess #redirect #mod-rewrite #url-rewriting #friendly-url

Вопрос:

@anubhava и @RavinderSingh13 продолжали помогать мне учиться и продвигаться туда, где я нахожусь сегодня, с помощью этого сценария. Это то, что у меня есть до сих пор:

 ##1st rule with one parameter: $id--
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} id=([0-9] ) [NC]
RewriteRule ^file.php$ /directory/%1? [R=301,L,NC]
RewriteRule ^directory/(d )/?$ /directory/file.php?id=$1 [L,QSA,NC]

##Parameters are $id and $class
RewriteCond %{THE_REQUEST} s/file.php?id=(d )amp;class=(w -class)s [NC]
RewriteRule ^ /directory/%1/%2? [R=301,L]
RewriteRule ^directory/(d )/(w -class)/?$ /directory/file.php?id=$1amp;class=$2 [NC,L,QSA]

##Rule with two parameters: $id and $name--
RewriteCond %{THE_REQUEST} s/file.php?id=(d )amp;name=(S )s [NC]
RewriteRule ^ /directory/%1/%2? [R=301,L]
RewriteRule ^directory/(d )/(.*)/?$ /directory/file.php?id=$1amp;name=$2 [NC,L,QSA]```
 

Теперь я хотел бы добавить еще одно правило с одним параметром вместо двух. Однако этот параметр использует PHP $_GET[‘имя’] в URL-адресе. Я пытаюсь добавить еще одно правило, которое переписывает http://IPADDRESS.com/file.php?name=JohnDoe чтобы http://IPADDRESS.com/newdirectory/JOHNDOE.

Спасибо!

Ответ №1:

С показанными вами образцами, пожалуйста, попробуйте выполнить следующие действия. Пожалуйста, не забудьте очистить кэш браузера перед тестированием ваших URL-адресов.

 RewriteEngine ON
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} id=([0-9] ) [NC]
RewriteRule ^file.php$ /directory/%1? [R=301,L,NC]
RewriteRule ^directory/(d )/?$ /directory/file.php?id=$1 [L,QSA,NC]

##Parameters are $id and $class
RewriteCond %{THE_REQUEST} s/file.php?id=(d )amp;class=(w -class)s [NC]
RewriteRule ^ /directory/%1/%2? [R=301,L]
RewriteRule ^directory/(d )/(w -class)/?$ /directory/file.php?id=$1amp;class=$2 [NC,L,QSA]

##Rule with two parameters: $id and $name--
RewriteCond %{THE_REQUEST} s/file.php?id=(d )amp;name=(S )s [NC]
RewriteRule ^ /directory/%1/%2? [R=301,L]
RewriteRule ^directory/(d )/(.*)/?$ /directory/file.php?id=$1amp;name=$2 [NC,L,QSA]

##Rule with two parameters: $name--
RewriteCond %{THE_REQUEST} s/file.php?name=(S )s [NC]
RewriteRule ^ /directory/%1? [R=301,L]
RewriteRule ^directory/([^/]*)/?$ /directory/file.php?name=$1 [NC,L,QSA]
 

Комментарии:

1. Спасибо за ответ! Вопрос, однако, так как оригинал file.php не находится в другом каталоге, должна ли последняя строка быть адаптирована следующим образом? RewriteRule ^directory/([^/]*)/?$ file.php?name=$1 [NC,L,QSA]

2. @ccc, да, пожалуйста, попробуйте один раз(это будет означать, что ваш htaccess и file.php находятся в той же папке) и дайте мне знать, я изменю его тогда.