我有一个index.php文件,我希望根据网址结构提供不同的内容。
例如。如果网址是mysite.com/index.php/folder1,我会运行某个查询并显示结果,如果网址是mysite.com/index.php/folder2,请运行其他查询。
该解决方案还必须适用于mysite.com/folder1等(即省略了index.php)。
如果将相同的方法扩展到mysite / com / folder1 / category1等,那将是理想的。注意,这里不需要GET变量。
答案 0 :(得分:2)
你需要的是一个路由组件,它将url链接到代码中的类/函数。该组件根据您的请求执行某些类/功能。 In this question,讨论了不同的策略,尽管有一些已经存在的框架缺失有趣:
你可以使用其中任何一个完全按我前面提到的那样做。例如,使用Symfony Routing Component,您可以在配置文件中包含您的路由(潜在URL),如:
# routes.yml
route1:
path: /foo
defaults: { _controller: 'MyController::fooAction' }
route2:
path: /foo/bar
defaults: { _controller: 'MyController::foobarAction' }
因此,当请求的uri与“/ foo”匹配时,将执行 MyController 类中的方法 fooAction 。 如果您不确定如何在现有代码库中实现此功能,我强烈建议您阅读由Fabien Potencier撰写的a series of posts about how to use different Symfony components in your code。关于路由部分有a specific post。
至于需要从您的网址中删除“index.php /”,您需要重写它。如果您使用的是Apache,则需要在虚拟主机配置文件中添加重写规则,或者只在文档根目录中创建.htaccess文件。 StackOverflow中有数百个问题(如this one),以及official documentation page中的大量文档。
答案 1 :(得分:0)
最好的方法可能是在浏览器中分配变量。 e.g。
index.php?folder=1 AND index.php?folder=2
在php中,你使用:
$folder = $GET_['folder']
if($folder == 1)
{
//show site 1
}
else if ($folder == 2)
{
//show site 2
}
else
{
//error code
}
还有其他方法,包括.htaccess但是对于那些不想进入的人,我发现这是最好的方式
答案 2 :(得分:0)
在.htaccess文件中添加以下RewriteRule并将.htaccess文件放入您的webroot
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
如果系统上没有文件/目录,则上述规则会将所有请求重定向到index.php。
例如,如果http://example.com/test返回404错误,如果没有上述规则,则使用上述重定向规则,这将解析为index.php。现在,在index.php中,您可以解析URL并根据您的要求进行处理。