How can I create a pretty url like this
customer/index/amount/12000/location/in . In Yii1.1 it was available by default. it was easy to enable pretty url. In Yii2 if need pretty url I've to write rules for every action !!!
In Codeigniter you will get index.php/controller/action/parameter1/parameter2/parameter3
ie it does not expose action parameter variables, that too without writing any url rules!
===Edit===
pretty URL doesnt work for parameters if no rule is defined
below is my main.php
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [ '<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
],
],
i am getting a lot of 404's, like
192.168.1.3/~user/urshow/frontend/web/movies/movies_all
it would have work fine if it would be like this
192.168.1.3/~user/urshow/frontend/web/index.php?r=/movies/movies_all
Go to config.php and add
'components' => [
...
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
],
...
],
Related
I need configure my Yii2 UrlManager rules like this:
change http://domain/site/action to http://domain/action
change http://domain/module/default to http://domain/module
so far what I have done:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<module:(!site)>' => '<module>/default',
'<action:\w+>' => 'site/<action>',
],
],
when I trying access module it return 404. But when I remove '<action:\w+>' => 'site/<action>', access module again will show as module/default page. So how to solve this?
You can try this code
'<action:(about|contact)>' => 'site/<action>',
insted of this
'<action:\w+>' => 'site/<action>',
and it will not work then change sequence of rules
'rules' => [
'<action:\w+>' => 'site/<action>', <-----------it will be first
'<module:(!site)>' => '<module>/default',
],
I'm trying to remove action name from url. 'post/view' to 'page' using urlManager but it's not working
'urlManager' => [
'class' => 'yii\web\UrlManager',
// Hide index.php
'showScriptName' => false,
// Use pretty URLs
'enablePrettyUrl' => true,
'rules' => [
//'<view:\w+>' => 'post/<alias>',
//'<alias:view>' => 'post/<alias>',
'page' => 'post/view',
],
],
Change your config to include the id:
'page/<id>' => 'post/view'
Allows you to use urls like this:
localhost:8585/yii2basic/wfp/web/page/PGr1mtIkAE
You can't really do this:
localhost:8585/yii2basic/wfp/web/post/id=PGr1mtIkAE
In web.php I have following code:
'urlManager' => [
'class' => 'yii\web\UrlManager',
// Disable index.php
'showScriptName' => false,
// Disable r= routes
'enablePrettyUrl' => true,
'rules' => array(
'calc' => 'site/calc',
),
],
And I want to allow users to access to example.com/calc but not to example.com/site/calc. How I can do it properly with less effort? By other words now works both options - "site/calc" and "calc" and I want to disable "site/calc".
Try to add enableStrictParsing to UrlManager configuration as follows
'urlManager' => [
'class' => 'yii\web\UrlManager',
// Disable index.php
'showScriptName' => false,
// Disable r= routes
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'rules' => array(
'calc' => 'site/calc',
),
],
In this case if there's no rule matching the request then it's considered as bad one.
I am facing a grate problem in my project.
When i browse url with my project name than it's show folders, but i don't want to show those folder i want to show direct my web site, like 'localhost/mywebsite/admin'.
I also try to solve this problem to add my backend/config/main.php file
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => 'false'
],
but it does not work.
Please help me to solve this problem.
Customize URL:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => true,
'rules' => [
'<_c:[\w\-]+>' => '<_c>/index',
'<_c:[\w\-]+>/<_a:[\w\-]+>' => '<_c>/<_a>',
'<_c:[\w\-]+>/<_a:[\w\-]+>/<id:\d+>' => '<_c>/<_a>',
],
],
In apache.conf input DocumentRoot /var/www/backend/web.
I can't show static pages. Try do it as described in doc here - http://stuff.cebe.cc/yii2-guide.pdf (on page 100) but when I enable prettyurl, it doesn't work.
Added in urlManager rules:
'urlManager' => array(
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => array(
'' => 'site/index',
'login' => 'site/login',
'contacts' => 'site/contact',
'<view:(break)>'=>'/site/page?&view=<view>',
),
),
then in SiteController added:
public function actions()
{
return [
...
'page' => [
'class'=>'yii\web\ViewAction',
],
];
}
And then created views/site/pages/break.php
<h1>View static page Break</h1>
But I get an error:
Not Found (#404)
Unable to resolve the request: site/page?&view=break
If i disable prettyUrl:
//'enablePrettyUrl'=>true
then i can see my page typing url: index.php?r=site/page&view=break
What's wrong with ViewAction?
I think you are doing the rules part of your url manage wrong.
Try this
'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>',
),
],
The rules part should be important..
I solved my problem. use such lines:
'<view:(break)>' => 'site/page',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
I force use specific name of page for view, in my case it "break", because can't use this
'<view:[a-zA-Z0-9-]+>' => 'site/page',
(it causes crashing other rules.) I think it could better create "own rule class" extending UrlRule, but think that now I don't need this.
I had tried this way (without rules specification) :
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => 'false'
],
Solution is simple:
web.php code is like this 'rules' => [
'site/page/<view:[a-zA-Z0-9-]+>' => 'site/index',
In SiteController don't use function actions(), instead:
public function actionIndex ($view)
{
return $this->render('/site/pages/' . $view);
} catch (InvalidParamException $e) {
throw new HttpException(404);
}.
If view contacts.php exists in views/site/pages/ , url is yourdomain/basic/web/site/page/contact
4.Thanks to samdark and it's article https://github.com/yiisoft/yii2/issues/2932