我正在尝试为我的网站创建一个漂亮的网址结构。
我的路由器类只有在 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 中使用查询字符串,则可以省略此标志。