【问题标题】:.htaccess redirect if file doesn't exist如果文件不存在,.htaccess 重定向
【发布时间】:2010-10-14 14:45:56
【问题描述】:

这就是我想要做的。我有一个简单的框架,我正在使用 mod rewrite 来重写 url,以便它们指向正确的文件。我有一个进程文件夹,它位于 web 文件夹内(web 文件夹是所有实际网站文件(如图像、css 等)所在的位置)。

这很好用,但我现在要做的是有一个 default.php 文件来处理表单。如果我将表单指向它,该文件效果很好,但我希望能够将表单指向它的正确文件,如果文件不存在,那么它使用 default.php

表单是由一个类创建的,动作设置为 process/{ID OF THE FORM}.php 这个想法是任何人都可以使用该类创建一个表单,如果他们不需要做任何事情特别是,default.php 文件将处理表单。

我意识到我可以将表单类设置为始终使用 default.php,然后在 default.php 文件上我可以检查是否存在正确的文件。如果是,则使用该文件,如果不是,则继续处理表单,但我仍然很想知道这样的东西是否适用于 mod rewrite:

RewriteRule ^process/([^/]*) /web/process/$1
RewriteCond %{DOCUMENT_ROOT}/web/process/$1 !-f
RewriteCond %{DOCUMENT_ROOT}/web/process/$1 !-d
RewriteRule ^process/([^/]*) /web/process/default.php [L]

【问题讨论】:

标签: php .htaccess mod-rewrite


【解决方案1】:

仅此一条规则就可以做到:

RewriteCond %{DOCUMENT_ROOT}web/$0 !-f
RewriteRule ^process/[^/]+$ web/process/default.php [L]

如果请求的路径无法映射到现有文件,则应将其重写为默认文件。

【讨论】:

    【解决方案2】:

    您通常应该在 RewriteRule 之前调用 RewriteCond。如果满足条件,则触发规则。

    【讨论】:

    • 是的,但是如何将进程/文件名重写为 web/process/filename,然后如果 web/process/filename 不存在,是否转到 web/process/default ?跨度>
    • 这两种情况在测试中是否适合您?看来您对默认情况的逻辑是正确的,但是无论如何都可能每次都执行第一个规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多