первый вопрос: я уже 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