设置干净的URL,如CodeIgniter

时间:2011-11-17 01:54:22

标签: php url-rewriting

我喜欢CodeIgniter清理网站网址的方式,但是,我有一个网站过于介入而无法重新开始使用CI框架(至少目前为止),而且我不需要深度CI提供,我只需要有一个深度。

使用直接PHP可以轻松地轻松完成此操作吗?

index.php?id=2454
index.php/2454/

注意:我需要一个直接的PHP解决方案,因为服务器是Windows而且.htaccess没有设置工作。

4 个答案:

答案 0 :(得分:1)

如果您在apache中使用mod_rewrite,您可以允许您的应用程序根据需要发送请求。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

假设您的服务器位于@ http://coolguy.com,用户访问http://coolguy.com/mycleanurl/

使用.htaccess或apache配置中的上述重写规则,您可以拦截通过$ _SERVER ['REDIRECT_URL']访问哪个网址,并将其发送到您想要的特定代码点。

如果在用户指定的位置直接存在文件,我在其中使用的“RewriteCond”指令用于忽略此重写规则,这对于CSS和图像等静态资源非常方便,您不希望这样做自己发送这些请求。

答案 1 :(得分:1)

签出$_SERVER['PATH_INFO'] - 它返回跟踪脚本文件名但在查询之前的任何内容。

例如,在网址中:

http://www.domain.com/index.php/var1/var2

$_SERVER['PATH_INFO']将包含/var1/var2

然后,您可以在__construct()init()等中编写一个函数来解析路径(例如explode("/", $_SERVER['PATH_INFO']))并将结果数组用作变量。

答案 2 :(得分:0)

您使用的是Apache吗?如果是这样,请查看名为.htaccess的文件。当它们存储在您的目录中时,它们会重写URL。因此,如果您使用

在您的网络根目录中放置.htaccess文件
# .htaccess
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/www/
RewriteRule ^(.*)$ /www/$1 [L]

然后,当某人访问网址yourdomain.com/page1时,它实际上将检索您服务器上的资源yourdomain.com/www/page1,但他们的浏览器将无法看到www。

因此,对于非常简单的URL重写,您可以使用它来隐藏URL中的?var=val&var2=val2垃圾

有关规则的信息是here

答案 3 :(得分:0)

如果您在Windows上使用PHP并想要进行URL重写,您有两种选择:

  • Url Rewrite(允许您在web.config中使用重写规则)http://www.iis.net/download/urlrewrite - 在IIS管理器中打开网站并选择" Url Rewriting",然后添加规则

  • 购买Helicon-APE或类似产品(允许您使用原生.htaccess文件)http://www.helicontech.com/ape/ - 我们在托管服务器的共享窗口上使用此功能并取得了巨大成功