如何重定向URL,以便它们都由同一个PHP页面处理

时间:2012-03-13 15:43:48

标签: php html .htaccess

我知道关于这个问题有很多问题,但问题,甚至更多答案都让我感到困惑。

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

换句话说:

www.example.com /

www.example.com/AboutUs

www.example.com/Contact

应该由一个.php脚本处理,但是在用户的浏览器中,URL保持不变。

现在,这是用.htaccess重写完成的吗?怎么样?

2 个答案:

答案 0 :(得分:3)

.htaccess使用Rewrite将是最佳方法:

<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>

答案 1 :(得分: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。