Intereting Posts

как удалить url (/web/index.php) yii 2 и задать маршрут с параметром с чистым URL-адресом?

первый вопрос: я уже index.php , но я хочу удалить /web также. это мой .htaccess

 RewriteEngine on # If a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward it to index.php RewriteRule . index.php 

и это config/web.php

 'urlManager' => [ 'class' => 'yii\web\UrlManager', // Disable index.php 'showScriptName' => false, // Disable r= routes 'enablePrettyUrl' => true, 'rules' => array( '<controller:\w+>/<id:\d+>' => '<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', '<controller:\w+>/<action:\w+>' => '<controller>/<action>', ), ], 

он работает нормально, но он все еще использует /web . возможно ли удалить /web ?

второй вопрос:

я не могу установить маршрут с параметром с этим чистым URL-адресом, мой маршрут Url::toRoute(['transaction/getrequestdetail/', 'id' => 1 ]);

как должен быть маршрут? и как с помощью 2-мерного маршрута?

Для расширенного приложения выполните следующие действия:

1) Добавьте следующий htaccess для frontend/web

 RewriteEngine on # If a directory or a file exists, use the request directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward the request to index.php RewriteRule . index.php 

2) Добавьте следующий htaccess в root folder где установлено приложение.

 # prevent directory listings Options -Indexes IndexIgnore */* # follow symbolic links Options FollowSymlinks RewriteEngine on RewriteRule ^admin(/.+)?$ backend/web/$1 [L,PT] RewriteRule ^(.+)?$ frontend/web/$1 

3) Отредактируйте файл frontend/config/main.php следующим образом:

 use \yii\web\Request; $baseUrl = str_replace('/frontend/web', '', (new Request)->getBaseUrl()); 

4) Добавьте request component в массив компонентов в том же файле, т.е. frontend/config/main.php

 'components' => [ 'request' => [ 'baseUrl' => $baseUrl, ], ], 

Вот и все. Теперь вы можете получить доступ к интерфейсу без web / index.php

Для вас второй вопрос вам нужно написать правило для него в вашем компоненте менеджера URL.

Что-то вроде этого:

 'urlManager' => [ 'baseUrl' => $baseUrl, 'class' => 'yii\web\UrlManager', // Disable index.php 'showScriptName' => false, // Disable r= routes 'enablePrettyUrl' => true, 'rules' => array( 'transaction/getrequestdetail/<id>' => 'transaction/getrequestdetail', ), ], 

Вы можете добавить информацию в конфигурацию файла для удаления / web:

 $baseUrl = str_replace('/web', '', (new Request)->getBaseUrl()); return [ ... 'components' => [ 'request' => [ 'baseUrl' => $baseUrl, ], ... ] ] 

Если он по-прежнему не работает после прохождения вышеперечисленных ответов, вы можете отредактировать файл apache2.conf в своем любимом редакторе, чтобы изменить

AllowOveride None to AllowOveride All

В Ubuntu файл находится по адресу /etc/apache2/apache2.conf

Окончательное редактирование должно выглядеть так:

 <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> 

Наконец, перезапустите сервер Apache