.htaccess mod_rewrite параметр в несуществующий поддиректор

#.htaccess #mod-rewrite #subdirectory

#.htaccess #переписать мод #подкаталог

Вопрос:

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

что-то вроде этого:

Реальный URL-адрес:

 host.com/post.php?id=17amp;lang=pl
 

Моя существующая перезапись:

 host.com/somedescriptionstring-p-17.html?lang=pl
 

Это достигается с помощью этого rewriterule:

 RewriteRule ^(.*)-p-(.*).html$ post.php?id=$2amp;%{QUERY_STRING}
 

Теперь я хочу расширить перезапись до:

 host.com/pl/somedescriptionstring-p-17.html
 

Это я хочу использовать для двух специальных языковых параметров: «pl» и «ru» — параметр по умолчанию должен быть «pl»

Кто-нибудь может мне помочь, пожалуйста?

Спасибо и с наилучшими пожеланиями.

Ответ №1:

Я предполагаю, что у вас будет два типа URL-адресов. Один из них имеет вид http://example.com/lang/post1234.html и один из них находится в форме http://example.com/post1234.html . У второго нет языка, и вы хотите по умолчанию использовать польский. Для этого вам понадобятся два правила. Первый из них внутренне перепишет тот, у которого есть код языка, на реальный URL. Другой будет выдавать внешнее перенаправление, чтобы добавить «pl» к URL.

 #This translates the fancy url internally
RewriteRule ^(pl|ru)/.*-p-([0-9] ).html$ /post.php?lang=$1amp;id=$2 [L]

#When there is a language parameter
RewriteCond %{QUERY_STRING} lang=(pl|ru)
RewriteRule ^(.*)-p-([0-9] ).html$ /%1/$1-p-$2.html [R,L]

#default case
RewriteRule ^(.*)-p-([0-9] ).html$ /pl/$1-p-$2.html [R,L]
 

Измените R на R=301 после тестирования, чтобы он работал правильно.

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

1. это выглядит хорошо. по крайней мере, я не получаю 404 🙂 моя оригинальная перезапись выглядит так: RewriteRule ^(.*)-p-(.*).html $ post.php?id= $ 2amp;%{QUERY_STRING} как реализовать ваше предложение здесь? Спасибо вам!

2. Код в комментариях нечитаем, и на первый взгляд этот код не соответствует ни одному URL-адресу в вопросе. Я не уверен, что вы хотите с перезаписью, которая у вас уже есть.

3. Я хочу расширить свой RewriteRule (код 3), чтобы URL-адрес в коде 2 выглядел как URL-адрес в коде 4

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

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