2008-11-05 57 views
4

我正在编写一个小型CMS来更好地理解它们的工作方式并学习一些关于PHP的新东西。但是我遇到了一个问题。mod_rewrite,php和.htaccess文件

我想使用mod_rewrite(尽管如果有人有更好的解决方案,我可以试试它)来生成漂亮干净的URL,因此site.com/index.php?page=2可以改为site.com/。工具

据我的理解,我需要改变我的.htaccess文件,每次我添加一个新页面,这是我遇到问题的地方,我的PHP一直告诉我,我无法更新它,因为它没有权限。快速chmod显示,即使有777的权限,它不能这样做,我错过了什么?

我的mod_rewrite指令的源代码当前是this page here因为它很重要/有用。

回答

10

一种方法是重写一切的处理脚本

RewriteEngine on 
RewriteBase/

# only rewrite if the requested file doesn't exist 
RewriteCond %{REQUEST_FILENAME} !-s 

# pass the rest of the request into index.php to handle  
RewriteRule ^(.*)$ /index.php/$1 [L] 

,所以如果你有http://yourserver/foo/bar/

请求你真正得到的是向http://yourserver/index.php/foo/bar一个请求 - 你可以离开的index.php决定如何处理/ foo/bar(使用$ _SERVER ['PATH_INFO'] - tom

您只需要第一次修改.htaccess。所有未来的文件请求都可以在PHP中处理。

你也许会发现the docs for mod_rewrite有用 - 但保持简单或准备失去大量的睡眠和头发追踪模糊的错误。

+1

可能值得解释的是,您可以从$ _SERVER ['PATH_INFO']之类的东西获得'/ foo/bar' – 2008-11-05 22:29:55

2

你的PHP应该是非常明显的原因,不能修改.htaccess。即使你得到这个工作,我不知道这是否明智。

如何使用关于mod_rewrite规则的更抽象的设置?根据您的需要定义您的一般网址格式。例如:

 
/object/action/id 

然后写了一组重新路由HTTP请求到PHP页面,这反过来又使决定哪些网页是运行(比如,通过包括相关的PHP脚本)的规则。

 
RewriteRule ^/(\w+)/?(\w+)?/?(\d+)?$ /index.php?object=$1&action=$2&id=$3 [nocase] 

这样你就不必更新.htaccess很多时候仍然是灵活的。