这是一个非常基本的问题,但我似乎无法在Google上找到任何内容,嗯。
无论如何,我不是指创建链接,我说的是生成链接,例如site.com/1或how to generate links in php?,网址后面的数字会以相应的帖子存储在数据库中,例如。我如何使用php生成这些?
如果我访问h ** p://site.com/questions/3870639/how-to-generate-links-in-php如何告诉服务器查询数据库并检索3870639的相应帖子? (没有htaccess)。
答案 0 :(得分:2)
仅使用PHP是不可能的,它需要一个名为mod_rewrite的Apache服务器模块(假设您为服务器使用Apache)。谷歌吧。
答案 1 :(得分:2)
您必须使用.htaccess
。
您可以通过将所有请求转发到特定文件来实现这些类型的URL。这是您的Front Controller,它将分解URL,提取信息并执行或委派必要的操作。使用前端控制器,您可以在网站上找到单一入口点。
但您需要设置.htaccess
以将所有请求转发到此文件,例如
RewriteRule ^(.*)$ index.php [QSA,L]
您应该检查实现此模式的各种框架,如symfony或Zend。
答案 2 :(得分:1)
如果你去了一个不存在的目录3870639,我不知道如何告诉服务器导航到某个页面。我会使用htaccess重定向到page.php或类似的,并使用$ _SERVER ['REQUEST_URI']来获取页面URL,或者将URL转换为htaccess中的$ _GET变量,然后你可以拆分('/',$ _SERVER ['REQUEST_URI'])获取目录数组。
$directories = split('/',$_SERVER['REQUEST_URI']);
print_r($directories);
给出
array(
[0] => 'site.com',
[1] => 'questions',
[2] => '3870639',
[3] => 'how-to-generate-links-in-php'
)
但就像我说的那样,不知道怎么去那个页面。
答案 3 :(得分:0)
文字转换。编写一个正则表达式,该表达式将发现一个URL并将其转换为<a href="$1">$1</a>
。
答案 4 :(得分:0)
使用mod_rewrite将是最佳解决方案,但如果您无法使用它,您仍然可以使用MultiViews实现类似的功能。但是,您仍然需要启用它(通常通过.htaccess或Apache conf完成)。
MultiViews用于允许内容协商,因此您可以请求/ images / banner和Apache返回适当的类型(banner.png,banner.svg等),具体取决于浏览器的Accept标头。您可以使用它来隐藏脚本的扩展名,从而允许您在不更改网址的情况下更改运行网站的技术。
在您的情况下,您可以使用
/问题/ 3870639 /如何对生成链接合的PHP
与
相同/questions.php/3870639/how-to-generate-links-in-php
在questions.php $_SERVER["PATH_INFO"]
中包含/3870639/how-to-generate-links-in-php
(或者您可以解析$_SERVER['REQUEST_URI']
,如BenWells所提及的那样)。使用explode()
或正则表达式来获取ID。
答案 5 :(得分:0)
我认为单独使用PHP是不可能的。您必须使用mod_rewrite(您不希望使用它)或将默认的404错误文件更改为index.php。然后在index.php中,您可以使用explode('/', $_SERVER['REQUEST_URI'])
从网址获取ID。
但另一种方法是使用url(我不确定这会起作用,但我想我已经在某处看到了它) http://site.com/index.php/questions/3870639/how-to-generate-links-in-php