将查询字符串转换为.php

时间:2018-10-02 15:35:09

标签: php .htaccess url-rewriting

TL; DR

  

打开search.php?key = value => value.php

我有一个简单的项目:

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

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

  

?search=test变为test.php

我发现了这样的帖子: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-我该如何实现自己的目标?

2 个答案:

答案 0 :(得分:1)

怎么样

RewriteEngine On
RewriteBase /

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

答案 1 :(得分: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]