使用PHP清理URL

时间:2012-05-25 05:56:25

标签: php http url url-mapping

因此,我尝试在PHP中构建一个干净的url系统,将此http://example.com/index.php?projects=05之类的URL更改为:http://example.com/projects/05

到目前为止,我已经找到了如何使用parse_url来映射看起来像http://example.com/index.php/projects/05的网址,但我无法弄清楚如何从网址中删除'index.php'。有没有办法使用.htaccess从url字符串中删除index.php

我知道这是一个简单的问题,但经过广泛的谷歌搜索,我找不到解决方案。

4 个答案:

答案 0 :(得分:1)

您需要使用mod_rewrite在Apache中执行此操作。您需要将所有URL重定向到index.php,然后使用parse_url,找出如何处理它们。

例如:

# Turn on the rewrite engine
RewriteEngine On

# Only redirect if the request is not for index.php
RewriteCond %{REQUEST_URI} !^/index\.php

# and the request is not for an actual file
RewriteCond %{REQUEST_FILENAME} !-f

# or an actual folder
RewriteCond %{REQUEST_FILENAME} !-d

# finally, rewrite (not redirect) to index.php
RewriteRule .* index.php [L]

答案 1 :(得分:0)

我正在使用以下.htaccess文件删除网址的index.php部分。

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !favicon.ico$

RewriteRule .* index.php/$0 [PT]

否则我可以推荐Kohana框架作为参考(他们也有一个相当不错的url解析器和控制器系统)

答案 2 :(得分:0)

你的.htaccess中有这样的东西:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

(确保启用了重写模块)

答案 3 :(得分:0)

将实际文件/文件夹与URL分离的概念称为路由。许多PHP框架都包含这种功能,主要使用mod_rewrite。在PHP URL Routing上有一篇很好的博客文章,它实现了一个简单的独立路由器类。

它创建了这样的映射:

mysite.com/projects/show/1 --> Projects::show(1)

因此,请求的网址会导致调用类show()的函数Projects,参数为1

您可以使用它来构建PHP代码的漂亮URL的灵活映射。