URL重写PHP仍然得到相同的$ _GET ['']?

时间:2012-05-22 06:28:59

标签: php apache url-rewriting

我非常喜欢这个URL重写。我的脑子里只有一个问题。

www.example.com/?page_name=home

$ _GET ['page_name']实际上是家

在URL重写后,网址变为

www.example.com/home

PHP仍然可以获得$ _GET ['page_name']是'home'??

由于

3 个答案:

答案 0 :(得分:2)

URL重写由 Web服务器完成,假设在这种情况下是Apache。这与PHP不同。

Apache收到对URL www.example.com/home的请求。现在需要弄清楚如何处理这个请求。它将检查其配置是否与www.example.com匹配,这将指向文档根,即硬盘上的某个文件夹。它检查硬盘上的该文件夹并遇到.htaccess文件。它会评估.htaccess文件,该文件告诉它重写/home?page_name=home的网址。

Apache现在试图找出如何处理?page_name=home。由于没有给出文件名,因此默认为index.php(希望存在)。它现在在文档根目录中运行index.php文件,并将其作为已收到的URL传递给它?page_name=home。 PHP从那里接受它,忘记了发生的重写。对于PHP,您似乎已收到参数page_name作为查询参数,并将其放入$_GET

答案 1 :(得分:1)

这取决于重写规则,但是,您可以按预期工作。

以下重写规则:

RewriteRule /home /index.php?page_name=home

只会导致请求/ home执行index.php,$_GET['page_name']等于“home”。

但是,根据网站的复杂程度,最好使用更通用的重写规则,例如:

RewriteRule ^(.+)$ index.php/$1

然后你会查询$ _SERVER ['PATH_INFO']以查看它是否包含“home”。这将与可能传入的其他$ _GET参数很好地配合使用。

答案 2 :(得分:1)

尝试使用这样的重写(根据需要进行更改):

RewriteRule ^([A-Za-Z0-9-_]+)/?$ index.php?page_name=$1 [L]

以上规则重定向

http://www.domain.com/string_LiKe-this53/

在真实的现有网页上

http://www.domain.com/index.php?page=string_LiKe-this53

您可以使用$_GET['page'] string_LiKe-this53,其价值为{{1}}。