2016-02-16 3 views
1

Как это сделать?Перезапись и перенаправление параметра Htaccess

somepage.php? Параметр1 = value1 & параметр2 = значение2 & параметр3 = value3 к somepage/параметр1/значение1/параметр2/value2/параметр3/Value3

, а также перенаправлять, что для старых индексированных URL.

Кроме того, я хочу, чтобы он работал только для двух параметров, или одного, или ни одного. Я попытался это, но, кажется, не работает, что хорошо:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [NC,L] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php 
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301] 

RewriteRule ^([^/]*)/parameter1/([^/]*)$ $1.php?lang=$2 [PT] 

ответ

2

Вы можете использовать общие правила, чтобы переписать /somepage/n1/v1/n2/v2 в /somepage.php?n2=v2&n1=v1

RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC] 
RewriteRule^/%1 [R=302,NE,L] 

RewriteRule ^(somepage)/([^/]*)/([^/]*)(/.*)?$ /$1/$4?$2=$3 [L,QSA,NC] 
RewriteRule ^(somepage)/?$ $1.php [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [L] 
+0

Это будет работать только с 1 параметром? –

+0

Это неправда, я даже тестировал его с помощью http: // localhost/somepage/n1/v1/n2/v2/n3/v3/n4/v4/', и он работает. – anubhava

+0

Я тоже попробую, потому что я всегда, хотя вам нужно было определить каждый случай вручную (как в моем ответе ниже). Я заинтригован вашим ответом. Что именно здесь происходит? Потому что я вижу только 3 поля, но вы используете до 4 долларов. И как он знает, как применять дополнительные параметры, которые вы не определяли в htaccess. Это из-за флага QSA? Раньше этого не видел. –

1

Вы должны создать правило для каждой возможной ситуации, с 2-мя параметрами, 1 параметром и без каких-либо параметров.

RewriteEngine On 
RewriteRule ^([^/]*)/parameter1/([^/]*)/parameter2/([^/]*)(/?)$ $1.php? 
parameter1=$2&parameter2=$3 [NC] 
RewriteRule ^([^/]*)/parameter1/([^/]*)(/?)$ $1.php?parameter1=$2 [NC] 
RewriteRule ^([^/]*)(/?)$ $1.php [NC] 

В конце (/?) Необходимо также уловить ситуации, когда ссылка заканчивается возможной косой чертой.

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