【问题标题】:htaccess url as parameterhtaccess url 作为参数
【发布时间】:2011-12-07 00:16:06
【问题描述】:

大家好,在此先感谢您,我正在尝试添加一个 url 作为参数,但我不能。 我的规则是:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^info/([a-zA-Z0-9|]+)/(.*)/(.*)$ info.php?user=$1&text=$2&url=$3

在浏览器中: http://localhost/example/info/peter/hi guy/http://www.example.com

返回数组$_GETphp

[user] => peter
[text] => hi guy / http:
[url] => www.example.com

什么是正确的:

[user] => peter
[text] => hi guy
[url] => http://www.example.com

希望您的帮助谢谢

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    这被称为贪心匹配..“点星号”尽可能匹配然后回溯。而是使用将匹配下一个斜杠的 [^/]。

    【讨论】:

    • 关于贪婪匹配的更多信息,请参阅link
    【解决方案2】:
    RewriteEngine on
    
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteRule ^info/([a-zA-Z0-9|]+)/([^/]*)/(.*)$ info.php?user=$1&text=$2&url=$3 [B,QSA]
    

    [^/] 表示“任何不是斜线的字符”。自然这意味着“文本”不能包含任何斜杠,但您的 URL 将被正确匹配。

    还要注意[B],这是您可以添加到重写规则的众多选项之一。 [B] 表示任何&s 和其他一些字符都将被转义。因此,如果您作为参数的 URL 有一个查询字符串,则可以在 $_GET['url'] 中读取它,否则其参数将被解释为新查询字符串的一部分。

    【讨论】:

    • 您好,早上好,一切正常,直到我进入 URL example.com?foo=34 类型或 example.com/index.php? user = 4 & w = This-cat 这应该在 htaccess 中更改以支持所有类型的 URL。再次感谢。
    【解决方案3】:

    http://localhost/example/info/peter/hi/guy/http://www.example.com 不是您要执行的操作的有效 URL。 URL 部分应该是 urlencoded。例如,请参阅this explanation

    正确的网址是:

    http://localhost/example/info/peter/hi/guy/http%3A%2F%2Fwww.example.com
    

    尽管如此,您的正则表达式的错误是贪婪匹配,如另一个答案中所述。但是,如果您对 URL 进行了正确编码,那将不是问题。

    【讨论】:

    • Seb,看我的回答。只要您设法正确匹配子 URL 并添加 [B] 标志,它就可以正常工作,而无需在生成链接时对 URL 进行编码。
    • @nitro2k01,是的,但是 OP 给出的示例是一个无效的 URL,我认为这值得指出。
    • 不是真的...唯一无效的事情与子URL无关;它是空间,应该编码为 %20。即使 SA 的解析器不喜欢带有未编码空格的 URL,浏览器也会在 href 属性等中自动对空格进行编码。这不是问题。另一方面,在 URL 中传递冒号和斜杠并没有什么无效的,即使服务器对 / 和 %2F 的解释不同。然后是用户友好性方面......您可能希望允许用户轻松地在 URL 末尾添加他/她自己的 URL 参数,而不必转义字符。
    【解决方案4】:

    不是我的专业领域,但为什么不对 url 使用 $_SERVER 请求?

    它可能有效,也可能无效,如果域发生变化,则无需更新任何内容。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2011-12-24
      相关资源
      最近更新 更多