3

我正在尝试为我的网站创建一个不错的 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
4

3 回答 3

8

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

FallbackResource /index.php
于 2012-11-28T19:23:16.977 回答
1

htaccess 应该是这样的

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

所以例如

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

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

于 2012-11-28T19:29:05.463 回答
0

从 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 中使用查询字符串,那么您可以省略此标志。

于 2012-11-28T19:28:26.937 回答