.htaccess Расширенная перезапись URL субдомена - PullRequest
0 голосов
/ 11 декабря 2011

Я хочу сохранить domain.com/wh независимо & www.domain.com/whither для моего основного сайта приложений, просто как предвестник следующего.

Для моих пользователей,У меня приложение настроено для того, чтобы их домашние страницы были username.domain.com.Это здорово, и показывает их страницу, но проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь обработать username.domain.com/one, username.domain.com/one/two, username.domain.com/one/two/three

Вот то, что у меня сейчас успешно отправляет субдомены на u.php

    RewriteCond %{HTTP_HOST} ^(^.*)\.domain\.com$
    RewriteRule ^(.*)$  u.php

Мне это не нужно менять (это работает).Теперь мне нужно:

  1. username.domain.com записывается в u.php (в настоящее время отлично работает, используя приведенное выше выражение)
  2. username.domain.com / записывается вa.php? request = one
  3. username.domain.com / one / two записывается в s.php? request = one & идент = два

Редактировать

Вот некоторые выражения, которые работали до того, как я настроил приложение для запуска пользовательских поддоменов, просто для справки:

    RewriteRule ^([a-z\-]+)/?$ a.php?request=$1 [L]
    RewriteRule ^/([a-z]+)/([a-z0-9\-]+)/?$ /s.php?request=$1&ident=$2 [L]
    RewriteRule ^u/([a-z]+)/([a-z]+)/([a-z0-9\-]+)/?$ /s.php?user=$1&request=$2&ident=$3 [L]

Пожалуйста, помните

Что моя проблема в настоящее время заключается в том, что все идетto user.domain.com/one не переписывается.Он все еще собирается в u.php, когда я хочу, чтобы он перешел в s.php? Request = $ 1

Еще раз спасибо за помощь!

1 Ответ

0 голосов
/ 27 июля 2014

Ваша первая строка на самом деле говорит: «Что бы это ни было, отправьте это на u.php»:

RewriteRule ^(.*)$  u.php

Одна из проблем, с которой вы здесь столкнулись, - это порядок, в котором вы помещаете выражения. Из-за вашего флага [L] ... http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_l

RewriteRule ^([a-z\-]+)/?$ a.php?request=$1 [L] ## <- would match one/two/three and would stop the script from continuing because of the [L] flag.
RewriteRule ^/([a-z]+)/([a-z0-9\-]+)/?$ /s.php?request=$1&ident=$2 [L]
RewriteRule ^u/([a-z]+)/([a-z]+)/([a-z0-9\-]+)/?$ /s.php?user=$1&request=$2&ident=$3 [L]

Возможное решение

Я объединил все ваши намерения в одно выражение соответствия, надеюсь, оно сработает для вас ...

RewriteRule ^([a-z\-]+)?/?([a-z\-]+)?/?([a-z\-]+)?/?$  u.php?first=$1&second=$2&third=$3 [L]
RewriteRule ^(.*) u.php [L]

Этот код отправит вам несколько пустых параметров ... которые вы должны проверить в своем PHP-коде.

Если вы действительно не хотите этого, вы всегда можете разделить свой код ...

RewriteRule ^([a-z\-]+)/([a-z\-]+)/([a-z\-]+)/?$  u.php?first=$1&second=$2&third=$3 [L]
RewriteRule ^([a-z\-]+)/([a-z\-]+)/?$  u.php?first=$1&second=$2 [L]
RewriteRule ^([a-z\-]+)/?$  u.php?first=$1 [L]
RewriteRule ^(.*) u.php [L]

Обратите внимание на порядок выражений. Третье выражение фактически соответствует одному / двум / трем.

Я просто использую [a-z-] здесь. Глядя на ваш собственный код, я понял, что вы знаете, как добавить поддержку цифр или прописных букв.

...