【问题标题】:Turn query string into .php将查询字符串转换为 .php
【发布时间】:2018-10-03 03:26:59
【问题描述】:

TL;DR

转search.php?key=value => value.php

我有一个简单的项目:

|-project
|-----.htaccess
|-----index.php
|-----jquery.min.js
|-----search.php

我想学习的只是如何将查询参数转换为 page.php,例如:

?search=test 变为 test.php

我发现了这个 SO 帖子:htaccess rewrite for query string

这建议了 3 种方法,我已经尝试了所有但我的 search.php 不起作用。

这是我的 index.php

<html>
<body>
    <form method="post">
        <input type="text" name="search" placeholder="search something" />
    </form>

    <button type="button" id="my-btn">Submit</button>

    <script src="jquery.min.js"></script>

    <script>
        jQuery(document).ready(function($)
        {
            $('#my-btn').click(function()
            {
                let val = $('input[type="text"]').val();


                $('form').attr('action', 'search.php?term='+ val);
                $('form').submit()
            })
        })
    </script>
</body>
</html>

去search.php

<?php
    $search = $_GET['search'];

    echo '<pre>';
    echo 'Search Term: <strong>'. $search .'</strong>';
    echo '</pre>';

    echo '<hr />';

我的 .htaccess 文件如下所示:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /search.php?term=$1 [L]

但这(或其他方法)不起作用。我的网址仍然是search.php?term=test - 我该如何实现我的目标?

【问题讨论】:

  • 您可能需要查看文档并检查 RewriteRule 指令的参数的作用。
  • @miken32 我看了看,但老实说不确定它卡住了,apache 的东西似乎不适合我.. 但我会继续重新阅读,直到一些灯亮起
  • 你已经把这个复杂化了,只需这样做&lt;form method="get" action="text.php"&gt; 并摆脱 JS 并重写东西。使用get 表单进行搜索并没有错,事实上这是最常见的用法。这就是它的意义所在,因此可以为 url 查询添加书签。
  • 学习正则表达式(正则表达式)它们有点过时和令人困惑,但是一旦你理解了它们,它们就会非常强大。如果您输入mysite.com/test.php,它将映射到mysite.com/search.php?page=test 例如regex101.com/r/Ax5qBN/1
  • @ArtisticPhoenix 我相信这是我绝对需要改进和发展技能的东西。这可能是阻碍我发展的主要因素之一

标签: php .htaccess url-rewriting


【解决方案1】:

您可以在project/.htaccess使用此代码:

RewriteEngine On

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} \s/+search(?:\.php)?\?term=([^\s&]+) [NC]
RewriteRule ^ /%1.php? [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.php$ search.php?term=$1 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ search.php?term=$1 [L,QSA]

【讨论】:

    【解决方案2】:

    怎么样

    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{QUERY_STRING} term=(.*)
    RewriteRule ^.*$ %1.php [L]
    

    【讨论】:

    • 产生:403 forbidden 消息:You don't have permission to access /.php on this server. 但我认为可能是正确的路径?
    • close .. 产生了 404 :S
    • 我已经对此进行了测试,它正在按照您对我的期望进行。如果得到404,是不是因为php文件不存在?
    • 它没有 - 基本上,search.php 是文件,但在 url 中应该看起来像 queryValue.php,例如search.php?key=value 变成 value.php(后面有 search.php)
    • “这就是我正在尝试做的(值 + .php)但是 - 该文件实际上并不存在”:) 似乎您正试图在浏览器栏上显示不同的文件名,但是执行的真实文件是另一个......可以通过包含要隐藏的文件并执行假文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多