5

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

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

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

我的 mod_rewrite 指令来源目前是这里的这个页面,以防它很重要/有用。

4

2 回答 2

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 中处理所有未来对不存在文件的请求。

您可能还会发现mod_rewrite 的文档很有用 - 但请保持简单或准备失去大量睡眠和头发追踪晦涩的错误。

于 2008-11-05T17:23:10.600 回答
2

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

关于 mod_rewrite 规则使用更抽象的设置怎么样?定义您想要使用的一般 URL 模式。例如:

/对象/动作/id

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

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

这样您就不必.htaccess经常更新并且仍然很灵活。

于 2008-11-05T17:26:52.013 回答