两全其美 - MVC站点和访问目录结构

时间:2013-11-24 15:39:08

标签: .htaccess symfony mod-rewrite

我在域上有一个组合的网站和Web应用程序,我想重写网站部分以使用更像Symfony2的MVC框架。

我想使用www.example.com/index.php/pagename方法,然后我可以用modrewrite替换为www.example.com/pagename。

问题 - 我不准备重构整个Web应用程序。例如,有些文件夹包含需要访问的文字文件。

www.example.com/admin/dosomething.php

所以我想知道在保留URL中的文件目录结构的同时使用更有吸引力的东西重写index.php的最佳想法。

思想/选项?

编辑:为了澄清,我想将example.com/index.php/page重写为更专业的东西,同时仍然允许访问http://www.example.com/admin/file.php,一个实际的路径。寻找想法和最佳实践。

1 个答案:

答案 0 :(得分:0)

默认.htaccess file from Symfony Standard Edition通过在重写之前检查文件是否存在来处理此问题。逻辑大致是“如果此请求与现有文件匹配,请不要重写...否则,重写为app.php”(或者在您的情况下为index.php)。

它通过将rewrite conditionsrewrite rule结合使用 - (破折号)作为替换来实现此目的(因此表明不应执行替换):

# If the requested filename exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

# Rewrite all other queries to the front controller.
RewriteRule .? app.php [L]

如果您想直接提供现有目录(而不是重定向到index.php),请使用-d开关,例如在顶部添加:

# If the requested directory exists, simply serve it (except the root, which
# should also be rewritten - the ".+" pattern requires the path to be at least
# one character long, thus ignoring the root).
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]