.htaccess 重构htaccess以满足友好url目标

vvppvyoh  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(225)

我的URL看起来像这样($_GET):
请访问:
基于SPA结构:
其中搜索:是用于搜索的控制器;其可以接收附加参数。
其他:1,2,3,4,5是附加参数,不存在定义的参数数目,它们可以更少或更多。
我想创建一个友好的网址,像:
请访问:
我开始测试的htaccess看起来像这样:

php_value display_errors On
php_value mbstring.http_input auto

<IfModule mod_rewrite>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

我有两个问题
1.也许这是正确的,还是可以进一步改进?
1.我如何实现它?
我看过该网站搜索引擎之前给出的答案,但它们与我希望的结果相差甚远:
https://stackoverflow.com/a/45075219/20284348
Problems configure .htaccess for friendly url
Taxonomy url change to friendly url
https://stackoverflow.com/a/55696789/20284348
我认为这些建议似乎无效,甚至可能已经过时。

8qgya5xd

8qgya5xd1#

如果您不知道将提供哪些参数,则应该在单个GET参数中提供完整的字符串,并在PHP代码中解析它。

RewriteRule ^(.*)$ index.php?params=$1 [L]

Index.php:

<?php
if ( isset( $_GET['params'] ) ) {
    // splits the slash-separated params string into an array
    $strParams = explode('/', $_GET['params']);

    foreach ( $strParams as $strParam) {
        $matches = [];
        // look for `=` char to separate parameter name and value
        preg_match('/([^=]*)=(.*)/', $strParam, $matches);

        // Populate $_GET using parameter name as key
        $_GET[$matches[1]] = $matches[2];
    }
}

我直接填充了超级全局变量$_GET,但更合适的方法是设置其他变量来代替$_GET。

相关问题