如何在Yii2中启用干净的URL.我想删除index.php和'?' 来自url参数.需要在Yii2中编辑哪个部分?
我想通过生成中提到的方法中的超链接 http://www.yiiframework.com/doc-2.0/guide-helper-html.html#hyperlinks这样
Html::a('<b>Register</b>',
['story/create', array('id' =>39,'usr'=>'11')],
['class' => 'profile-link'])
Run Code Online (Sandbox Code Playgroud)
我想得到网址 story/create/id/39/usr/11
但它正在产生
story/create?1%5Bid%5D=39&1%5Busr%5D=1
Run Code Online (Sandbox Code Playgroud)
我启用了yii2的干净网址功能
'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>',
),
], also.
Run Code Online (Sandbox Code Playgroud)
如何实现这一目标?
我用过,Yii::app()->request->getParam()所以我可以有一个友好的网址/listings/amenities/1.
我的控制器上有3个动作来获取参数$property_id = Yii::app()->request->getParam('property_id').
这两个行动amenities和meals工作正常,但在最后一个动作photos时,VAR property_id有一个空值.
我尝试删除照片规则上的第二个参数,一切正常.如何在不删除第二个参数的情况下解决这个问题gallery_id?
以下是urlmanager规则:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
'listings/amenities/<property_id>'=>'listings/amenities',
'listings/meals/<property_id>'=>'listings/meals',
'listings/photos/<property_id>/<gallery_id>'=>'listings/photos',
),
),
Run Code Online (Sandbox Code Playgroud)
[编辑]我认为解决方案涉及如何正确设置可选参数的规则来处理请求listings/photos/1和listings/photos/1/2.添加OR符号无法解决问题.
'listings/photos/<property_id>/<gallery_id>'=>'listings/photos'
Run Code Online (Sandbox Code Playgroud) 我的应用程序部署在localhost/upload上.
我使用以下代码生成相对URL.
Url::to('@web/my_controller/action'); // it returns /upload/my_controller/action
Run Code Online (Sandbox Code Playgroud)
但是,我需要这样的完整URL:http:// localhost/upload/my_controller/action.
我错过了什么吗?
我需要http://example.com/post/view/id/1网址的规则,该规则将显示为http://example.com/post/post_title.而不是身份证号码我想显示帖子名称或标题.
我的配置如下所示:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
//'<controller:\w+>/<id:\d+>'=>'<controller>/view',
//'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
//'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
'showScriptName'=>false,
),
Run Code Online (Sandbox Code Playgroud) 在Yii中是否有buildin方法或属性来检查页面是否是主页?
我知道我可以使用这样的东西:
$controller = Yii::app()->getController();
$isHome = $controller->getAction()->getId() === 'index' ? true : false;
Run Code Online (Sandbox Code Playgroud)
或者把它放在主控制器的方法中,但我正在寻找更清洁的东西.
谢谢.
我正在研究yii2项目,并希望将其部署到apache服务器,其中整个网站都应该位于/ public_html目录中,并且/ public_html是该主机的Web根目录。问题在于yii2期望Web根目录为/ web,并且期望大多数站点层次结构都位于/ web目录之外。
我希望不必将webroot更改为/ public_html / web,对于将来的项目,这可能不是一个选择。因此,有没有办法将整个网站层次结构放置在/ public_html中,并且仍然使网站正常工作?
我尝试创建具有以下内容的/public_html/.htaccess文件:
RewriteEngine on
RewriteCond %{REQUEST_URI} !web/
RewriteRule (.*) /web/$1 [L]
Run Code Online (Sandbox Code Playgroud)
首先,这似乎正常工作。/ public_html / web之外的任何内容都无法访问,并且/ web子目录中的文件(例如/web/js/signup.js)可以通过url http://localhost/js/signup.js进行访问,但这引起了我的路由规则(是在本地系统上设置的,我可以将Web根目录指向/ web)不再被识别。
因此,我可以选择.htaccess路由的替代方案,或者对如何修改路由规则以使.htaccess路由起作用的建议感到满意。
编辑澄清
我有一个托管提供商,其网络根为〜/ public_html。Yii有文档说明您可以将www重命名为public_html,并将通常位于/ www之外的所有内容放在〜中,以及Linux通常放置在〜中的各种点文件和用户文档。我希望将所有与站点相关的目录放在一起(在webroot下)。
或者,可以使用两目录结构,例如以下结构:
~/
|--- (Various dotfiles and subdirectories unrelated to the web site)
|--- yii - Contains all subfolders that should be outside of the web root
|--- commands
|--- config
|--- controllers
|--- (etc...)
|--- public_html - Contains everything that can be within the web root.
|--- …Run Code Online (Sandbox Code Playgroud) 我有这个错误,我不知道解决。
我用 Yii2 创建了一个 api 端点。几天前端点正在工作,但现在它没有并引发此错误:
{
name: "Unknown Property",
message: "Setting unknown property: yii\web\UrlRule::GET index",
code: 0,
type: "yii\base\UnknownPropertyException",
file: "C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\base\Object.php",
line: 161,
stack-trace: [
"#0 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\BaseYii.php(521): yii\base\Object->__set('GET index', 'index')",
"#1 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\base\Object.php(105): yii\BaseYii::configure(Object(yii\web\UrlRule), Array)",
"#2 [internal function]: yii\base\Object->__construct(Array)",
"#3 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\Container.php(374): ReflectionClass->newInstanceArgs(Array)",
"#4 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\Container.php(153): yii\di\Container->build('yii\\web\\UrlRule', Array, Array)",
"#5 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\BaseYii.php(344): yii\di\Container->get('yii\\web\\UrlRule', Array, Array)",
"#6 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\web\UrlManager.php(212): yii\BaseYii::createObject(Array)",
"#7 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\web\UrlManager.php(154): yii\web\UrlManager->buildRules(Array)",
"#8 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\base\Object.php(107): yii\web\UrlManager->init()",
"#9 [internal function]: yii\base\Object->__construct(Array)",
"#10 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\Container.php(374): ReflectionClass->newInstanceArgs(Array)",
"#11 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\Container.php(153): yii\di\Container->build('yii\\web\\UrlMana...', Array, Array)",
"#12 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\BaseYii.php(344): yii\di\Container->get('yii\\web\\UrlMana...', Array, Array)",
"#13 C:\xampp\htdocs\forkandjoin\vendor\yiisoft\yii2\di\ServiceLocator.php(133): …Run Code Online (Sandbox Code Playgroud) 在Yii2中,我无法启用漂亮的网址.
我的配置:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
],
Run Code Online (Sandbox Code Playgroud)
我的.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
Run Code Online (Sandbox Code Playgroud)
我的剧本:
echo 'enablePrettyUrl: ';
echo Yii::$app->urlManager->enablePrettyUrl ? 'true ' : 'false';
echo '<br>';
echo 'enableStrictParsing: ';
echo Yii::$app->urlManager->enableStrictParsing ? 'true ' : 'false';
echo '<br>';
echo 'showScriptName: ';
echo Yii::$app->urlManager->showScriptName ? 'true ' : 'false';
echo Url::to(['/book/read', 't' => …Run Code Online (Sandbox Code Playgroud) 我需要在vendor/yiisoft/yii2/web/urlmanager.php中做一些更改才能使我的url_alias工作!我需要知道我是否可以直接更改此文件,或者是否有任何方法来覆盖此文件?
yii-url-manager ×10
yii2 ×7
php ×4
clean-urls ×3
yii ×3
.htaccess ×2
api ×1
composer-php ×1
parameters ×1
rest ×1