Назад | Перейти на главную страницу

Перезапись URI с поддельными поддоменами и несколькими переменными

Может ли кто-нибудь помочь с попыткой переписать мод, чтобы foo.domain.com переписан на domain.com/p.php?s=foo и foo.domain.com/bar к domain.com/p.php?s=foo&p=bar?

В настоящее время мой .htaccess является:

RewriteEngine On

# Remove www
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

# Rewrite subdomain etc.
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^([^/]+)/?$ p.php?s=%1&p=$2 [QSA,L,NC]

Но я не могу понять, как получить вторую переменную (необязательную и после косой черты в конце URI. Я попытался изменить конец условия на ?/(.*)$, но безрезультатно, и мои навыки переписывания модов определенно неуместны!

Это останавливает странное перенаправление, но не удаляет косую черту из URI (я думаю, с точки зрения SEO, несколько URI для дублированного контента - это плохо :)) нужно ли перенаправление? Я попытался добавить флаг R = 301, но это не сработало. Любые идеи?

(Извините за добавление ответа, кнопка «добавить комментарий» буквально исчезла!)

Если можно получить p Параметр пустой в случае пустой части URL, должно работать следующее:

# Rewrite subdomain etc.
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !p.php
RewriteRule ^(.+/)?([^/]*)$ p.php?s=%1&p=$2 [QSA,L,NC]

Если вы хотите полностью исключить p в случае прямого попадания на foo.domain.com, вам нужно добавить к вышеупомянутому также специальное правило для этого случая, соответствующее пустому URL-адресу - например:

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !p.php
RewriteRule ^$ p.php?s=%1 [QSA,L,NC]