因此,我尝试在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
?
我知道这是一个简单的问题,但经过广泛的谷歌搜索,我找不到解决方案。
答案 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的灵活映射。