Может ли кто-нибудь помочь с попыткой переписать мод, чтобы 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]