Как создать дружественный URL в php?

Вы используете Integer в POJO и Long в репозитории и контроллере. Измените либо все из них, чтобы использовать Integer или Long.

64
задан tshepang 7 October 2013 в 18:16
поделиться

6 ответов

Недавно я использовал следующее в приложении, которое хорошо работает для моих нужд.

.htaccess

<IfModule mod_rewrite.c>
# enable rewrite engine
RewriteEngine On

# if requested url does not exist pass it as path info to index.php
RewriteRule ^$ index.php?/ [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?/$1 [QSA,L]
</IfModule>

index.php

foreach (explode ("/", $_SERVER['REQUEST_URI']) as $part)
{
    // Figure out what you want to do with the URL parts.
}
29
ответ дан 24 November 2019 в 15:56
поделиться

Согласно этой статье , вам нужно правило mod_rewrite (помещенное в файл .htaccess ), которое выглядит примерно так:

RewriteEngine on
RewriteRule ^/news/([0-9]+)\.html /news.php?news_id=$1

И это сопоставляет запросы из

/news.php?news_id=63

с

/news/63.html

Другая возможность заключается в том, чтобы сделать это с forcetype , который вынуждает что-нибудь по определенному пути использовать php для оценки содержимого. Итак, в вашем файле .htaccess укажите следующее:

<Files news>
    ForceType application/x-httpd-php
</Files>

И тогда index.php может выполнить действие на основе переменной $ _ SERVER ['PATH_INFO'] :

<?php
    echo $_SERVER['PATH_INFO'];
    // outputs '/63.html'
?>
45
ответ дан 24 November 2019 в 15:56
поделиться

На самом деле это не PHP, это apache, использующий mod_rewrite. Что происходит, если человек запрашивает ссылку, www.example.com/profile/12345, а затем Apache перебирает ее, используя правило перезаписи, чтобы она выглядела так: www.example.com/profile.php?u=12345, сервер. Вы можете найти больше здесь: Руководство по переписыванию

4
ответ дан 24 November 2019 в 15:56
поделиться

Есть много разных способов сделать это. Одним из способов является использование методов RewriteRule, упомянутых ранее, для маскировки значений строки запроса.

Один из способов, которые мне действительно нравятся, - использование шаблона front controller , вы также можете использовать URL-адреса, например http://yoursite.com/index.php/path/to/your/page/here и проанализируйте значение $ _SERVER ['REQUEST_URI'].

Вы можете легко извлечь / path / to / бит / page / here со следующим битом кода:

$route = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));

Оттуда вы можете анализировать его по своему усмотрению, но ради Пита убедитесь, что вы его дезинфицируете;)

0
ответ дан 24 November 2019 в 15:56
поделиться

ModRewrite - не единственный ответ , Вы также можете использовать Options + MultiViews в .htaccess, а затем проверить $ _ SERVER REQUEST_URI , чтобы найти все, что есть в URL.

0
ответ дан 24 November 2019 в 15:56
поделиться

Похоже, вы говорите о веб-сервисе RESTful.

http://en.wikipedia.org/wiki/Representational_State_Transfer

Файл .htaccess переписывает все URI, чтобы указать на один контроллер, но это более подробно, чем вы хотите получить в этот момент. Возможно, вы захотите взглянуть на Recess

Это RESTful-фреймворк, все на PHP

-2
ответ дан 24 November 2019 в 15:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: