#.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-адрес в вопросе. Если вы все еще не можете заставить его работать, вам нужно получить дополнительную репутацию, чтобы мы могли обсудить это в чате.