#php #.htaccess #codeigniter #mod-rewrite #laravel
#php #.htaccess #codeigniter #мод-переписать #laravel
Вопрос:
У меня есть основной веб-сайт (example.com ). Я использую там фреймворк CodeIgniter.
Я также буду использовать несколько разных вложенных папок, таких как example.com/sub1
, example.com/sub2
. Я использую здесь фреймворк Laravel, и они будут полностью отличаться от example.com и хранится в другой папке. Когда я запускал первый поддомен, я использовал Alias
конфигурацию Apache2, и она работала отлично. Однако теперь мне нужно использовать вторую вложенную папку. Я добавил второй Alias
sub2 в конфигурацию Apache, который указывает на тот же каталог, что и sub1. Затем я изменил свой .htaccess на это:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(img|js|css)
RewriteCond %{REQUEST_URI} (/evim)
RewriteRule ^ /evim/index.php [L]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(img|js|css)
RewriteCond %{REQUEST_URI} (/crm2)
RewriteRule ^ /crm2/index.php [L]
</IfModule>
Теперь все работает нормально. Оба example.com/sub1 и example.com/sub2 запускает одно и то же приложение. Однако в Laravel трудно найти, какой поддомен запущен в данный момент. В маршрутах приложение не видит имя вложенной папки. Например, если я использую users/login
route , то он соответствует обоим example.com/sub1/users/login
и example.com/sub2/users/login
. Мне нужно определить маршруты с именем вложенной папки.
Я ищу решение в htaccess или Laravel для исправления маршрутов.
Комментарии:
1. В codeigniter я нахожу лучший способ — создать подкаталоги. вызывается Admin или каким-либо другим именем, которое вы хотите для серверной части со своим собственным index.php и папка приложения. и еще одна папка под названием catalog основной index.php будет использовать каталог в качестве папки приложения. Если вы хотите создать библиотеки для обоих каталогов, поместите их в папку systems lib. Это работает, я делаю похожий, все, что сделано, просто работая над безопасностью администратора, и я нахожу, что чем меньше возиться с htacess, тем лучше.
2. example.com использует CodeIgniter, однако приложение вложенной папки использует Laravel. Я хочу, чтобы они были полностью разделены в файловой системе.
3. Я бы просто попытался придерживаться одного фрейма
Ответ №1:
Я бы использовал этот шаблон (как поддомены), и, возможно, это может избежать проблем.
http://site1.foo.com http://site2.foo.com
В маршруте CodeIgniter.php вы можете сделать следующее:
$server_link = explode(".", $_SERVER["HTTP_HOST"]);
if ( $server_link[0] == "site1" )
{
$route['default_controller'] = 'home';
// Some Other Routes
}
Я думаю, вы можете сделать то же самое для маршрутов Laravel.
Комментарии:
1. Да, поддомены были бы очень простым решением, однако я не могу использовать поддомены.
Ответ №2:
Раньше я Request::server('HTTP_HOST')
получал, какой сайт загружен.