使用 PHP 和 Apache 的路由 URL 路径



我正在尝试为我的网站创建一个漂亮的网址结构。

我的路由器类只有在 url 采用 ?something=value 的样式时才有效。

我如何获得它,以便它像这样工作:

/something/value

在我的 .htaccess 中,我有:

Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !.(js|txt|gif|jpg|png)$ index.php?$1 [L,QSA]

在我的路由器类中,我正在制作:

class init {
    function __construct()
    {
    $URL = substr($_SERVER['REQUEST_URI'], 19) ;
    $URLElements = explode('/', $URL) ; // Adjust if needed.
    $class = $URLElements[0] ;
    $method = $URLElements[1] ;
    if(($t = substr_count($URL, '/')) > 1)
    {
        for($i=2;$i<$t+1;$i++) {
            echo $URLElements[$i].'<br />';
        }
    }
    }

}

感谢Jason,我的.htaccess现在只是:

FallbackResource /t2013/public_html/index.php

要使用 Apache 快速处理前端控制器的方法,请使用 FallbackResource 并使用 PHP 解析 URL。

FallbackResource /index.php

htaccess应该是这样的

RewriteEngine on
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)$ $1.php?$2=$3 [QSA]

所以例如

/

home/something/value 将被重定向到/home.php?something=value

试一试,对此并不完全确定,但以前做过类似的事情。

从 PHP 的角度来看,你只需要将 init 类调整为关闭$_SERVER['REQUEST_URI']而不是$_SERVER['QUERY_STRING']。 您没有在此处显示完整的逻辑,但我的猜测是,您只需修剪第一个/,然后在/上分解 URI 以获取组件部分。

从.htaccess的角度来看,您可以将最后一行更改为:

RewriteRule ^.*$ index.php [L,QSA]

您不需要在此处专门检测 images/css/js,因为该RewriteCond已经对任何实际文件或目录的重写规则进行了例外。 请注意,在RewriteRule中,我确实保留了查询字符串追加 (QSA) 标志,以防您仍然想执行类似 /controller?some=string&of=data 如果您根本不打算在新 URI 中使用查询字符串,则可以省略此标志。

相关内容

  • 没有找到相关文章