Итак, у меня странная настройка сервера, которую я не контролирую.Мой производственный сайт выглядит следующим образом:
/www/users/name <- server points here
/public <- I want it to point here, but I don't have that option
index.php <- all requests should eventually end up here
К нему можно получить доступ через www.test.com / users / name AND www.test.com / ~ name
Мой сайт разработчика выглядит так:
/www/name/public <- dev server points here
index.php <- all requests should eventually end up here
Доступ к нему осуществляется только через www.test.dev
Я используюPHP Framework, который заставляет мои URL всегда иметь одинаковую базу для работы (Laravel).Так что www.test.com / ~ name / stuff будет работать, но www.test.com / users / name / stuff НЕ будет работать.Я хотел бы, чтобы мои URL-адреса всегда отображались как первые, чтобы обойти эту проблему.
Я создал файл .htaccess для своего производственного базового каталога, который всегда будет перенаправлять в общедоступный каталог, например:
RewriteEngine on
RewriteRule ^(.*)$ public/$1
В общедоступном каталоге есть файл .htaccess, подобный этому, который поставляется с используемой платформой (которую я не хотел бы менять, так как мой dev-сайт прекрасно с ней работает):
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
При этом все / ~ name запросы работают отлично, но ни один из / users / name не работает. Как исправить файл .htaccess моего производственного базового каталога так, чтобы все запросы от / users / name к / ~ name?
Я попытался добавить:
RedirectMatch ^/users/name/(.*)$ /~name/$1
Что не работает, потому что переписаны раскрыты.Например, если я запрашиваю www.test.com / ~ name / stuff , это отображается как www.test.com / ~ name / public / index.php / stuff .Без строки RedirectMatch все ~ запросы имен работают отлично.
Любопытно, если я поменяю вышеприведенное правило на:
RedirectMatch ^/~name/(.*)$ /users/name/$1
Все работает отлично, за исключением того, что мои URL всегда будут иметь / users / name вместо / ~ name , как я бы предпочел.
Очевидно, я готов с этим жить, если то, что я спрашиваю, невозможно.Если бы кто-то мог объяснить, почему вышесказанное работает, а предыдущий - нет, это тоже было бы неплохо.Я обнаружил, что могу заставить работать первый, добавив RedirectBase / ~ name в ОБА файлы .htaccess, но, как я упоминал выше, я не хотел бы изменять публичный файл .htaccess, так как обаDev и производственные среды используют его.
Заранее спасибо!