Перезапись URL при использовании метода PHP GET - PullRequest
2 голосов
/ 22 июня 2010

Когда я нажимаю на раздел комментариев для данной записи на моем сайте, URL выглядит следующим образом:

http://www. .. ком /.../ комментарии / index.php? Представление = Португалия% 20Crushes% 20North% 20Korea & submissionid = 62 & URL = nytimes.com / 2010/06/22 / спорт / футбол / 22portugalgame .html ГПВ & countcomments = 3 & submittor = johnjohn12 & submissiondate = 2010-06-21% 2019: 00: 07 & dispurl = nytimes.com

Я хочу, чтобы он выглядел следующим образом:

http://www. .. ком /.../ комментарии / Португалия-Crushes-Северная Корея-62

Я понимаю, что это связано с добавлением правил в файл .htaccess. У меня два вопроса:

  1. Поскольку я использую метод GET в PHP, к этому уродливому URL-адресу добавлено несколько переменных. Я не хочу, чтобы все эти переменные появлялись в чистом URL. Можно ли включить только несколько переменных в чистый URL-адрес, но при этом есть правило, направляющее его на уродливый URL-адрес со всеми переменными?

  2. Как только у меня будут написаны правила .htaccess, могу ли я вернуться и изменить ссылки в исходном коде, чтобы они направлялись на чистые URL-адреса? Если да, то как я могу это сделать, используя метод GET, если чистый URL-адрес не содержит всех переменных, которые я хочу передать?

Заранее спасибо,

John

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

Я не уверен, зачем вам все эти данные в URL. Вы должны хранить такие вещи, как заголовок представления, его дату и автора в базе данных, а затем обращаться к нему с идентификатором. Таким образом, ваши URL будут короче и красивее:

http://www.example.org/article.php?id=1

http://www.example.org/article/1/

Вы можете сделать это с помощью простого RewriteRule в вашем файле .htaccess, например:

RewriteEngine On
RewriteRule ^articles/([0-9]+)/    article.php?id=$1
0 голосов
/ 22 июня 2010

Я присоединяюсь к слову Sjoerd, но есть много способов, как вы можете переписать свой URL, как вы хотите!

Apache и (IIS тоже) поддерживают URL-адреса, как этот: http://example.com/index.php/my-rewritten-url_62

function URISegment($segment)
{
    $uri_array = explode('/',$_SERVER['REQUEST_URI']);
    $uri_count = count($uri_array);
    $returning_uri = array();

    for($i = 0;$i<$uri_count;$i++)
    {
        if(empty($uri_array[$i]) || $uri_array[$i] == "index.php")
            unset($uri_array[$i]);
        else
            array_push($returning_uri,$uri_array[$i]);
    }

    if($segment < count($returning_uri))
        return $returning_uri[$segment];
    else
        return false;
}

Это работает, но вам также нужно определить базовый URL-адрес, и его нужно вызывать в начале файла и реализовывать при каждом вызове изображения, сценария и т. Д.

function BaseURL()
{
    if(isset($_SERVER['HTTP_HOST']))
    {
        $base = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 'https' : 'http';
        $base .= '://'. $_SERVER['HTTP_HOST'];
        $base .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
    }
    else
    {
        $base = 'http://localhost/';
    }
    return $base;   
}

После этого вы можете использовать вместо этого:

// http://example.com/?MyKey=Some-data
$MyKey = $_GET['MyKey']; //which is the first item
echo $MyKey;
// results: Some-data

This:

// http://example.com/?MyKey=Some-data
$MyKey = URISegment(0);
echo $MyKey;
// results: Some-data

Вы получаете одинаковый результат по каждому.

PS:

Мне нравится это решение, потому что я могу смешивать типы URL по мере необходимости:

example.com/index.php/index/evaled-article?some=db-stored&code=snipplet

И, конечно, вы можете переписать свой URL, как сказал FRKT:)

И, конечно, если вы хотите скрыть index.php, вам нужно использовать mod_rewrite, потому что нет никакого способа

0 голосов
/ 22 июня 2010

Нет, вы не можете пропустить переменные и ожидать их передачи в любом случае.Если вы сделаете это, информация больше не будет в URL, поэтому у вас нет способа ее получить.

Вы можете использовать post вместо get, если хотите передать переменные без их отображения вURL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...