mod_rewrite,php和.htaccess文件

时间:2008-11-05 17:13:25

标签: php .htaccess mod-rewrite

我正在编写一个小型CMS,以便更好地了解它们的工作方式并学习一些有关PHP的新知识。然而,我遇到了一个问题。

我想使用mod_rewrite(虽然如果有人有更好的解决方案,我可以尝试它)来生成漂亮干净的URL,所以site.com/index.php?page=2可以改为site.com/tools

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

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

2 个答案:

答案 0 :(得分: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 :(得分:2)

由于非常明显的原因,您的PHP无法修改.htaccess。即使你让它工作,我也不确定它是否明智。

如何在mod_rewrite规则中使用更抽象的设置?根据您的意愿定义您的常规URL模式。例如:

/object/action/id

然后编写一组规则,将HTTP请求重新路由到PHP页面,从而决定运行哪个页面(例如,通过包含相关的PHP脚本)。

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

通过这种方式,您不必经常更新.htaccess仍然具有灵活性。