【问题标题】:GET parameter is fetching undesired file extensionGET 参数正在获取不需要的文件扩展名
【发布时间】:2013-02-03 03:59:52
【问题描述】:

GET 正在获取文件扩展名和值。 这是我的 .htaccess -

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^test/(.*)/(.*)/$ /Test3.php?u=$1&i=$2 [NC,L]
RewriteRule ^test/(.*)/(.*)$ /Test3.php?u=$1&i=$2 [NC,L]
RewriteRule ^test/(.*)/$ /Test3.php?u=$1 [NC,L]

文件Test3.php是这样的-

<?php
echo $_GET['u'];
echo '<br/>';
echo $_GET['i'];
?>

我正在传递的网址 - http://example.com/test/something/more/

我的浏览器上的输出 -

something/more.php

想要的输出在哪里

something
more

我已经刮掉了我的整个网站来解决这个问题,但没有运气。不知道为什么我最后会得到那个 php,而 http://example.com/test/ 之后的完整值只会转到第一个参数。

请帮忙!

谢谢大家!我相信这个问题来自这条线。请就此提出解决方案。

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php http://www.example.com/$1 [R=301,L]

【问题讨论】:

  • 我不知道正则表达式是否贪心,但这可能是问题所在,因为 (.*) 可能表示“包括斜线在内的所有内容”。
  • RewriteRule ^(([^/]+/)*[^.]+)\.php 在您的新代码中看起来像是添加了 .php 因为\.php

标签: php .htaccess


【解决方案1】:

我不是 RewruteRules 方面的专家,但我知道一些正则表达式和.* in:

^test/(.*)/(.*)/$

表示它匹配任何内容,包括 /'s。

你可能想试试:

RewriteRule ^test/([^/]+)/([^/]+)/?$ /Test3.php?u=$1&i=$2 [L,NC]
//removed this one because they are basically the same
//by adding '/?' it says that the slash is optional
RewriteRule ^test/([^/]+)/?$ /Test3.php?u=$1 [L,NC]

有人可能想对正则表达式提出建议,但我认为它会为您服务。

编辑:或者你可以做类似https://stackoverflow.com/a/14663292/1700963

如果有人有更好的例子,请编辑或发表评论。

【讨论】:

    【解决方案2】:

    我发现一个页面描述了我在评论中提到的贪婪的东西: http://www.mspo.com/how-to/greed-in-apache-rewrite-rules.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-15
      • 2011-10-02
      • 2023-03-21
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      相关资源
      最近更新 更多