2012-03-13 30 views
0

我知道关于此主题有很多问题,但问题和更多答案让我感到困惑。如何重定向URL,以便它们全部由相同的PHP页面处理

我想要做什么: 我想要一个互联网页面,根据URL显示不同的内容。但是,在后端,所有页面都由一个中央PHP页面处理。

换句话说:

www.example.com/

www.example.com/AboutUs

www.example.com/Contact

都应该由一个处理单一的.php脚本,但以这样的方式,在用户的浏览器中URLS保持不变。

现在,这是用.htaccess重写或不?如何?

回答

3

.htaccess使用重写将是这一点的最好办法:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L] 
</IfModule> 

在你index.php您可以使用$_GET['uri']$_SERVER['REQUEST_URI']值,以确定正在请求哪个功能。

如果你只想要你的控制器脚本来处理文件和目录不存在请求,你可以这样做:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L] 
</IfModule> 
+0

感谢您的回复!如果我理解正确,则会将http://www.example.com/something更改为http://www.example.com/index.php?url=something。是对的吗?浏览页面的人是否看不见? – Qqwy 2012-03-13 15:58:13

+0

这是正确的。 – webbiedave 2012-03-13 16:03:10

1

是的,你可以通过添加mod_rewrite的规则,以你的.htaccess实现这一目标文件。这里是一篇更详细的文章:http://net.tutsplus.com/tutorials/other/a-deeper-look-at-mod_rewrite-for-apache/

它可能不会帮助你的困惑,但它至少会教你正确的语法。基本上,mod_rewrite采用浏览器中提供的“干净”URL,使用正则表达式对其进行解码,然后将正则表达式中的匹配作为GET变量离散传递。

换句话说:mod_rewrite以“example.com/AboutUs”为例,读取URL并提供页面上的任何内容“example.com/index.php?page=AboutUs”而不显示用户实际的GET变化缠身的URL。

+0

是的,这完全清除了我的困惑:)。非常感谢! – Qqwy 2012-03-13 16:00:51