【问题标题】:Why does .htaccess only receive index.php as input为什么 .htaccess 只接收 index.php 作为输入
【发布时间】:2010-07-11 22:19:35
【问题描述】:

我已将一个 .htaccess 文件添加到我的根文件夹中,并且我希望将 / 之后写入的所有内容作为获取数据发送到 index.php 文件。

我的根路径看起来像这样http://www.site.com/folder/,我的 .htaccess 与 index.php 一起位于文件夹目录中

这是我的 .htaccess 文件:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) index.php?args=$1

现在,我在我的 url 中的 folder/ 后面写的,args 是“index.php”。所以当我访问 www.site.com/folder/lots/of/bogey 时,args 变量是“index.php”

我的目标显然是让 args 变量为“lots/of/bogey”。任何想法我做错了什么?

【问题讨论】:

    标签: php .htaccess get


    【解决方案1】:

    您不需要 RewriteCond。以下将起作用:

    RewriteRule ^(.*)$ index.php?args=$1 [L,QSA]
    

    L 使它停止匹配重写规则,QSA 用于在重写规则中附加到查询字符串。参考mod_rewrite

    【讨论】:

    • 不,这不起作用。即使它是本次传递中的 [L]ast RewriteRule,mod_rewrite 也会使用新的、重写的 filname 再次调用自身 - 这将是 index.php!
    • @nikic。你是什​​么意思它不起作用..我实际测试过它并且它起作用了。
    • @nikic。 Drupal 之类的软件也可以做到这一点。
    【解决方案2】:

    我认为这是因为在执行 RewriteRule 并获得 index.php?args=... 之后,RewriteRule 再次被调用。现在index.php 是你的文件名,所以它作为参数传递。在此之后 mod_rewrite 由于递归而中止。要解决此问题,请添加 RewriteCond 以确保文件不是 index.php

    【讨论】:

      【解决方案3】:

      您至少需要从重定向中排除 index.php:

      RewriteCond $0 !^index\.php$
      RewriteRule .* index.php?args=$0 [QSA,B]
      

      【讨论】:

      • 如果我可以排除任何包含“.”的输入,这对我的图像标签会更好。你能告诉我怎么做吗?
      • @Code 用我给RewriteCond $0 !\. 的rewritecond 替换。由于“index.php”有一个点,这也抓住了 index.php 的情况
      • RewriteCond $0 !\.这就是我所做的,它创造了奇迹。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多