我想index.php在查询参数后从我的 URL 中删除。
这是我的网址:
http://127.0.0.1/user/report?user=USERNAME
Run Code Online (Sandbox Code Playgroud)
我已经删除了查询参数并将其转换为漂亮的 URL:
RewriteCond %{QUERY_STRING} !user=
RewriteRule ^([a-zA-Z0-9\-]+)/(.*)$ $2?user=$1 [L,QSA]
RewriteRule ^([a-zA-Z0-9\-]+)$ ?user=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)
现在,我的网址如下所示:
http://127.0.0.1/user/report/USERNAME
Run Code Online (Sandbox Code Playgroud)
所以对这个 URL 的所有请求都将指向我的项目的入口脚本,即web/index.php.
当我使用以下路线获取数据时,它可以工作:
http://127.0.0.1/user/report/Default/index.php/api/registration/user-registrations/
Run Code Online (Sandbox Code Playgroud)
但是当我index.php从 URL 中删除并像下面那样访问它时,它会抛出 404:
http://127.0.0.1/user/report/Default/api/registration/user-registrations/
Run Code Online (Sandbox Code Playgroud)
阿帕奇配置文件:
Alias /user/report /path/to/project/web/
<Directory /path/to/project/web/>
AllowOverride All
Require all Granted
RewriteOptions AllowNoSlash
RewriteEngine On
RewriteBase /user/report/
RewriteOptions AllowNoSlash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[^.]+[^\/]$ $0\/ [R]
RewriteCond %{QUERY_STRING} !user=
RewriteRule ^([a-zA-Z0-9\-]+)/(.*)$ $2?user=$1 [L,QSA]
RewriteRule ^([a-zA-Z0-9\-]+)$ ?user=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|m?js|png|svgz?|webp|webmanifest|pdf)$ $1.$3 [L] …Run Code Online (Sandbox Code Playgroud) 这是标准Yii2 SearchModel search行动
public function search($params, $cond)
{
$query = Service::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
$query->where(['param' => $value]); //why this modified after it passed to provider?
return $dataProvider;
}
Run Code Online (Sandbox Code Playgroud)
为什么theres $query被修改AFTER作为参数传递给ActiveDataProvider它并且它有效?如何用params保持参考$query?