我知道关于这个问题有很多问题,但问题,甚至更多答案都让我感到困惑。
我想做什么: 我希望有一个互联网页面,根据URL,显示不同的内容。但是,在后端,所有页面都由一个中央PHP页面处理。
换句话说:
www.example.com /
www.example.com/AboutUs
www.example.com/Contact
应该由一个.php脚本处理,但是在用户的浏览器中,URL保持不变。
现在,这是用.htaccess重写完成的吗?怎么样?
答案 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。