【问题标题】:.htaccess rewrite, for all directories.htaccess 重写,适用于所有目录
【发布时间】:2011-10-25 11:20:31
【问题描述】:

所以我有错误是通过 url 传递的,例如

index.php?error=nojs

然后会被PHP解析返回错误信息,例如:请启用Javascript

我在我的 .htaccess 中使用以下行来使 url 更易于管理

RewriteRule ^ERROR_(.*)$ index.php/?error=$1&%{QUERY_STRING} [L]

它使我的 URL 看起来像这样: site.com/ERROR_nojs

问题是,这只对root有效,

index.php?error=nojs        works fine however
test/index.php?error=nojs   does not?

那么如何转换每个目录的变量呢?

谢谢。 (我的原始脚本处理数百个错误并过滤掉可能对输出给用户有用的错误。将它们重定向到索引只是为了让他们可以看到一个带有错误消息的小错误)

EDIT:

正如 Shai Mishali 指出的那样,在 ERROR 起作用之前删除了“^”。

RewriteRule ERROR_(.*)$ index.php/?error=$1&%{QUERY_STRING} [L]

但我忘了告诉你我还有另一个变量 ?page=

我需要获取该 vairbale 并将其添加到 url 以使其正常工作..

例如:

index.php?page=home&error=nojs
= site.com/home/ERROR_nojs

所以

 www.site.com/?page=home&error=nojs   = www.site.com/home/ERROR_nojs

 www.site/?page=about&error=unknown  = www.site.com/about/ERROR_unknown

【问题讨论】:

    标签: php .htaccess url mod-rewrite


    【解决方案1】:

    我很确定您的问题是您的规则正在寻找以 ERROR (^ 符号) 开头的内容。

    /ERROR 以错误开头,它在您的 root 中有效,但是 /tests/ERROR 以 tests 开头,所以它不会识别它。

    尝试删除 ^ 符号,看看会发生什么。

    夏。

    【讨论】:

    • 谢谢,这是个好主意,但只会导致重定向错误。
    • 这实际上可能有效,我还有其他变量在我的示例中没有提到。谢谢。
    • 如果您仍然需要帮助,请随时编辑您的问题并尝试提供帮助。如果这对您有所帮助,请不要忘记接受我的回答;-) 干杯。
    • 开除先生,我试图让我的问题变得简单易懂,它只涉及转换另一个变量 - 这是我遇到的困难。
    • 嘿,比利,正如 Ashok 建议的那样,您可以尝试类似 RewriteRule ^(.*?)\/ERROR_(.*?)$ index.php/?page=$1&error=$2&%{QUERY_STRING } [L]
    【解决方案2】:

    你可以使用下面的代码

     RewriteRule ^([a-z0-9A-Z]+)/([a-z0-9A-Z]+)$ ./index.php?page=$1&error=ERROR_$2 [NC]
    

    您的 URL site.com/home/ERROR_nojs 将被视为 index.php?page=home&error=nojs,您可以通过 GET 方法获取值。更多info

    【讨论】:

      猜你喜欢
      • 2019-05-02
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多