将URL映射到自定义文件

时间:2014-09-07 12:57:14

标签: php apache url-rewriting

我想将localhost XAMPP中的URL映射到自定义文件中。

例如:

  • localhost/index.php - > d:\xampp\htdocs\index.php(默认)
  • localhost/normal/data.php - > d:\xampp\htdocs\normal\data.php(默认)
  • localhost/view/userinfo.php - > d:\xampp\htdocs\view.php?p=userinfo(自定义)
  • localhost/view/welcome.php - > d:\xampp\htdocs\view.php?p=welcome(自定义)

因此,基本上,进入view路径内的所有URL都将映射到view.php文件,其filename.php(减去.php)作为其查询参数。实际上没有物理文件夹view,文件夹中没有物理文件userinfo.php和welcome.php

我需要这样做的原因是,我可以将查看数据的所有页面传递到“应用程序框架”,该页面将包含页眉,菜单和页脚,我不需要提供每页中的标题,菜单和页脚调用。我可能有实际文件userinfo.php,我可以$ include_once,或者我可能没有(我可以从view.php中生成它),但是,嘿,这是这种框架的力量之一,对吧?并且,如果有一天我需要更改此结构,我可以在一个文件(view.php)中更改它,而不是全部。

我可以在PHP和XAMPP中执行此操作吗?怎么样?我注意到有些网站似乎使用了这种做法(URL根本没有实际文件甚至路径),但当我尝试阅读教程时,我感到很困惑。

URL mapping in PHP?

接受的答案列出了3个链接,以了解URL重写。大多数情况下,它们都是在Linux中为Apache编写的,而且大多数情况下它们都会将所有可能出现的情况和配置与我所需要的所有这些长文档和技术术语混淆。我只需要解决具体问题的实际步骤,然后,如果我有更高级的需求,我将能够从那里开始探索自己。请帮忙。

3 个答案:

答案 0 :(得分:1)

XAMPP使用apache,因此重写在Windows中的工作方式与在Linux中的工作方式相同。您可以使用一些重写规则将.htaccess放在站点根目录中。

但是,使用PHP

在d:\ xampp \ htdocs \ view \ userinfo.php中你可以包含这行

<?php 
  header('Location: http://localhost/view.php?p=userinfo');
?>

但这必须在任何事物被回显到屏幕之前(甚至是空白)。

答案 1 :(得分:1)

您可以使用Apache模块mod_rewrite在请求到达PHP之前对其进行编辑。您希望在htdocs目录的.htaccess文件中添加以下内容。

RewriteEngine on
RewriteCond %{REQUEST_URI} ^view/
RewriteRule ^view/(.*)\.php.*$ view.php?p=$1 [L,QSA]

QSA表示查询字符串追加。这意味着如果在原始请求中设置了任何GET个参数,它们也将附加到新请求的末尾。

请注意,这假设Apache已配置为启用AllowOverride且已加载mod_rewrite模块。

答案 2 :(得分:1)

如果您确实想要下载mod重写路由,请将以下内容添加到站点根目录中的.htaccess文件中。你需要确保为XAMPP打开mod重写,我不能帮助你,我害怕。正如你所看到的,它重写了url,而不是windows文件名 - 所以它可以在任何操作系统上运行。

([a-z] *)表示它将使用任何带有小写字母的filename.php并重定向到/view.php?p=$1,其中$ 1将被文件名替换。

[L,R](L表示最后一条规则,如果达到更多则停止处理,R表示重定向(它将更改浏览器中的URL)。使用P代替反向代理(用户仍然看到他们要求的网址,但服务器将提供正确的文件) - 这也需要mod_proxy。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} ^view/
  RewriteRule ^view/([a-z]*).php$ /view.php?p=$1 [L,R]
</IfModule>