所以我想建立一个干净的URL系统PHP来改变这样的URLS http://example.com/index.php?projects=05
到: http://example.com/projects/05
到目前为止,我已经想通了如何使用parse_url
URL映射看起来像http://example.com/index.php/projects/05
但我无法弄清楚如何从删除“的index.php” URL。 有没有办法使用的.htaccess删除方式index.php
从URL字符串?
我知道这是种简单的问题,但大量的谷歌搜索后,我无法找到一个解决方案。
你需要使用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]
我使用下面的.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解析器和控制系统)
从URL脱钩的实际文件/文件夹的概念被称为路由 。 许多PHP框架,包括这样的功能,大都采用了mod_rewrite 。 有一个不错的博客文章PHP URL路由实现一个简单的独立路由器类。
它创建这样的映射:
mysite.com/projects/show/1 --> Projects::show(1)
所以在功能请求的URL结果show()
之类的Projects
被称为,用的参数1
。
你可以用它来构建漂亮的URL的灵活映射到你的PHP代码。
像这样的事情在你的.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
(请务必重写模块使能)