Довольно URL не работает на сервере yii2

Я использовал конфигурацию urlManager, чтобы получить такие URL:

   'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => false,
'rules' => [
'login/' => 'site/login',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>/',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>/',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
],
],

он работает на моем локальном хосте, но не на сервере. содержимое файла .htaccess:

# Increase cookie security
<IfModule php5_module>
php_value session.cookie_httponly true
</IfModule>

# Settings to hide index.php and ensure pretty urls
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

1

Решение

Важная вещь, которую нужно сделать:

Recent Apache versions (from 2.3.9) have "AllowOverride None" by default and versions before had "AllowOverride All" (see allowoverride).

Таким образом, код может работать на локальном хосте, но выдавать 404 на сервере из-за разных версий apache.

http://www.yiiframework.com/forum/index.php/topic/51470-pretty-urls-and-htaccess

1

Другие решения

Включить симпатичный URL в шаблоне YII2 Advance.

Сначала создайте файл .htaccess в корневом каталоге вашего проекта. Например, если имя вашего проекта называется «Yii-Advance», то создайте файл Yii-Advance / .htaccess и вставьте в него следующий код.

Шаг 1

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
</IfModule>

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^/(admin)
RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L]
RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L]
RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/
RewriteCond %{REQUEST_URI} ^/(admin)
RewriteRule ^.*$ backend/web/index.php [L]
RewriteCond %{REQUEST_URI} ^/(assets|css)
RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css)/
RewriteCond %{REQUEST_URI} !index.phpRewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ frontend/web/index.php
</IfModule>

Шаг 2

Создайте новый файл с именем «Request.php» и поместите его в «common / components /» с этим кодом.

     <?php

namespace common\components;
class Request extends \yii\web\Request {
public $web;
public $adminUrl;

public function getBaseUrl(){
return str_replace($this->web, "", parent::getBaseUrl()) . $this->adminUrl;
}/*
If you don't have this function, the admin site will 404 if you leave off
the trailing slash.

E.g.:

Wouldn't work:
site.com/admin

Would work:
site.com/admin/

Using this function, both will work.
*/
public function resolvePathInfo(){
if($this->getUrl() === $this->adminUrl){
return "";
}else{
return parent::resolvePathInfo();
}
}
}

Шаг 3

Теперь установите Поместите эти строки в frontend / config / main.php

  'request'=>[
'class' => 'common\components\Request',
'web'=> '/frontend/web'
],

Шаг 4

Поместите эти строки в backend / config / main.php

  'request'=>[
'class' => 'common\components\Request',
'web'=> '/backend/web',
'adminUrl' => '/admin'
],

Шаг 6

Включите симпатичные URL в Frontend / config / main.php и в backend / config / main.php таким образом, в моем случае у меня есть два контроллера «Сайт, Пользователь»

'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<alias:index|login|logout|contact|about|signup|request-password-reset|reset-password>' => 'site/<alias>',
'<alias:index|create|confirm|confirmation|update|delete>' => 'user/<alias>',
],
],

это оно

Теперь, когда вы получите доступ к вашему шаблону приложения yii2 advance, вы увидите URL таким образом

Перед этими шагами URL-адрес: HTTP: // локальный / Yii-Advance / интерфейс / веб / сайт / Логин

После этих шагов URL-адрес: HTTP: // локальный / Yii-Advance / Войти

1

По вопросам рекламы [email protected]