htaccess для субдомена и перезаписи URL - PullRequest
0 голосов
/ 19 марта 2012

У меня проблемы с этим .htaccess

RewriteCond %{HTTP_HOST} appname.domain.com
RewriteCond %{REQUEST_URI} !appname/
RewriteRule ^(.*)$ /appname/$1 [L]

В корне документа (на самом деле это не корневой документ, скажем, папка v-domain), у меня есть эта папка с именем appname.На appname.domain.com все отображается нормально, как и должно.Теперь моя проблема в том, что когда я хочу сделать что-то вроде этого

http://appname.domain.com/somefolder

, я не хочу, чтобы URL переписывался в appname.domain.com/appname/somefolder в строке URL.Любая помощь?

Обновление: в корне документа у меня есть

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^v-domain/
RewriteRule ^(.*)$  /v-domain/$1 [L]

В V-домен

RewriteEngine On
RewriteBase /v-domain/

RewriteCond %{HTTP_HOST} appname.domain.com
RewriteCond %{REQUEST_URI} !appname/
RewriteRule ^(.*)$ /appname/$1 [L]
RewriteCond %{HTTP_HOST} appname.domain.com
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^appname/(.+)$ http://appname.domain.com/$1/    [R=301,L]
###################
RewriteCond %{HTTP_HOST} appname2.domain.com
RewriteCond %{REQUEST_URI} !appname2/
RewriteRule ^(.*)$ /appname2/$1 [L]
RewriteCond %{HTTP_HOST} appname2.domain.com
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^appname2/(.+)$ http://appname2.domain.com/$1/  [R=301,L]

1 Ответ

1 голос
/ 19 марта 2012

Попытайтесь создать каталог в папке вашего субдомена с индексом в нем, а затем попытайтесь найти этот путь. Вы увидите, что URL переписан безобразно упомянутым способом "appname.domain.com/appname/somefolder"

Звучит так, как будто Directory_lir mod_dir мешает. Когда DirectorySlash включен, если mod_dir видит, что для каталога сделан запрос и отсутствует косая черта, перенаправляет браузер на эквивалентный URL-адрес, чтобы включить косую черту.

Что-то, что вы можете сделать, это включить DirectorySlash off, но есть проблема раскрытия, когда дело доходит до DirectoryIndex'ing (см. Запись DirectorySlash в mod_dir). Вы можете попытаться добавить некоторые правила, чтобы сделать это перенаправление для вас, но убедитесь, что перенаправление без бита /appname/ в URL:

RewriteCond %{HTTP_HOST} appname.domain.com
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^appname/(.+)$ http://appname.domain.com/$1/    [R=301,L]

Это в основном проверяет, является ли запрос для хоста appname.domain.com, что запрошенный объект является каталогом, что запрос не заканчивается завершающей косой чертой, и если запрос уже был переписан для /appname/ перенаправить браузер на тот же URL-адрес (без имени приложения), но с косой чертой. После перенаправления первое правило, которое у вас есть, будет внутренне переписывать URI для включения / appname /, но, поскольку запрос теперь заканчивается косой чертой, mod_dir должен его игнорировать.

...