【发布时间】:2011-03-14 05:35:46
【问题描述】:
嘿,我已经阅读 StackOverflow.com 很长时间了,但我决定注册一个问题。我正在编写自己的轻量级 MVC 框架,在 index.php 中路由页面请求。
页面请求看起来像 /controller/action/arg1/arg2/arg3,它们应该被重写为 index.php?route=[request]。所以,像 site.com/user/profile/123 这样的 [request] 应该重写为 index.php?route=user/profile/123
但是,文件并不意味着要重写为 index.php。图片和样式表等资源位于 /app/webroot/ 文件夹中,不需要执行 PHP。因此,mod_rewrite 引擎应该将所有文件请求重写到 /app/webroot/,并在文件不存在时提供配置的 404 ErrorDocument。
目录结构
- ./index.php
- ./app/webroot/scripts/helpers/hamster.js
- ./app/webroot/images/logo.png
- ./app/webroot/style/main.css
由于您可以仅通过文件扩展名/点的存在来区分文件请求 (/squirrel.png) 和页面请求 (/user/profile/123),我期待这真的是简单。但是...我真的很难过,我希望有人能帮助我。
我试过的东西是……
重写引擎开启
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
重写规则 ^(.*)$ app/webroot/$1 [L]
RewriteRule ^(.*)$ index.php?route=$1 [QSA,L]
...但除了正确重定向到现有文件之外,它并没有真正起作用。页面请求或不存在的文件会导致 HTTP 500 错误。
非常感谢任何帮助! =)
【问题讨论】:
-
您应该检查您的网络服务器的日志。页面请求上的错误 500 可能意味着您的应用中存在错误
-
我也想过这个问题。但这里的问题仅在于 .htaccess 文件中的无效条目。 (现在 index.php 的第一行调用 die($_GET['route']) 进行测试,所以问题不存在)
标签: php mod-rewrite