【问题标题】:mod_rewrite, php and the .htaccess filemod_rewrite、php 和 .htaccess 文件
【发布时间】:2010-09-20 22:08:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    一种方法是将所有内容重写为处理脚本

    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 很有用 - 但请保持简单,否则准备好失去大量睡眠和追踪晦涩的错误。

    【讨论】:

    • 可能值得解释一下,您可以从类似 $_SERVER['PATH_INFO']
    【解决方案2】:

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

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

    /对象/动作/id

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      相关资源
      最近更新 更多