Условие .htaccess RewriteRule - PullRequest
       8

Условие .htaccess RewriteRule

0 голосов
/ 07 ноября 2011

У меня есть следующий код:

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$
RewriteRule ^ http://domain.com/ipad%{REQUEST_URI} [L,P]

Итак, мой поддомен, http://m.domain.com действительно вытягивает из http://domain.com/ipad/

Все работает нормально, если я набираю: http://m.domain.com/shop-name/ работает отлично.Но когда я пропускаю косую черту и набираю http://m.domain.com/shop-name, он перенаправляется на http://domain.com/ipad/shop-name/, что не должно произойти, никто не должен видеть каталог ipad.

Кто-нибудь знает, какЯ могу это исправить?

Спасибо!

1 Ответ

1 голос
/ 08 ноября 2011

Это может быть связано с тем, что mod_dir обрабатывает запрос внутренне. При доступе к http://m.domain.com/shop-name, а затем он переписывается на http://domain.com/ipad/shop-name, mod_dir 302 перенаправляет браузер на http://domain.com/ipad/shop-name/.

Вы можете попробовать обработать косую черту в вашем RewriteRule. Вероятно, более чистый способ сделать это, но что-то вроде:

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$
# Has trailing slash in request, don't need to append one in the RewriteRule
RewriteCond %{THE_REQUEST} ./\ HTTP/1\.[01]$
RewriteRule ^ http://domain.com/ipad%{REQUEST_URI} [L,P]

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$
# Missing trailing slash in request
RewriteCond %{THE_REQUEST} [^/]\ HTTP/1\.[01]$
# Request doesn't end with one of these extensions, 301 redirect to include trailing slash
RewriteCond %{REQUEST_FILENAME} !\.(php|html?|jpg|gif)$
RewriteRule . http://m.domain.com%{REQUEST_URI}/ [R=301]

РЕДАКТИРОВАТЬ: отредактировано для адреса перенаправления 301 пропущенного завершающего слеша

...