我正在编写一个小型CMS,以便更好地了解它们的工作方式并学习一些有关PHP的新知识。然而,我遇到了一个问题。
我想使用mod_rewrite(虽然如果有人有更好的解决方案,我可以尝试它)来生成漂亮干净的URL,所以site.com/index.php?page=2可以改为site.com/tools
根据我的理解,我需要在每次添加新页面时更改我的.htaccess文件,这是我遇到问题的地方,我的PHP一直告诉我,由于它没有权限,我无法更新它。快速的chmod显示,即使拥有777权限也无法做到,我错过了什么?
我的mod_rewrite指令源目前是this page here,因为它很重要/有用。
答案 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
仍然具有灵活性。