как мне отображать псевдоним пользователя вместо ID в профиле страницы [дубликат]

Мне нравится упрощать код без использования условных операторов в таких случаях:

  TEMP = / mnt / silo / bin [[$ {PATH} = ~ $ {TEMP}]] |  |  PATH = $ PATH: $ TEMP  
52
задан Tshepang 7 October 2013 в 19:16
поделиться

8 ответов

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

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

И это отображает запросы от

/news.php?news_id=63

to

/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'
?>
38
ответ дан Chris Forrence 16 August 2018 в 02:04
поделиться
  • 1
    Отличный ресурс mod_rewrite: addedbytes/apache/mod_rewrite-cheat-sheet – James Socol 1 May 2009 в 19:29
  • 2
    Я предлагаю его учебник перед чит-сайтом: addedbytes.com/apache/url-rewriting-for-beginners – Chad Birch 1 May 2009 в 19:33
  • 3
    Другой вариант, если вы хотите полностью переписать URL-адрес вашего URL-адреса, заключается в том, чтобы установить правила перезаписи для направления всех запросов на один скрипт. Одно из преимуществ этого - сохранить свой код в области, недоступной для Apache, и только ваш скрипт для отправки URL-адресов должен быть доступен Apache. Например: RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule. dispatch.php Это похоже на ваш пример forcetype. – Frank Farmer 1 May 2009 в 20:50
  • 4
    Статья о Phpriot была удалена, прочитал ее здесь . Это очень хорошая штука. – Jasom Dotnet 19 December 2015 в 11:08
  • 5

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

0
ответ дан empi 16 August 2018 в 02:04
поделиться
  • 1
    Да, но MultiViews icky ... Я бы сказал, что это слишком общее для этого использования. – David Z 1 May 2009 в 20:22

Простой способ сделать это. Попробуйте этот код. Поместите код в свой файл htaccess:

Options +FollowSymLinks

RewriteEngine on

RewriteRule profile/(.*)/ profile.php?u=$1

RewriteRule profile/(.*) profile.php?u=$1   

Он создаст симпатичный URL этого типа:

http://www.domain.com/ Профиль / 12345 /

Для получения дополнительной информации htaccess Довольно URL: http://www.webconfs.com/url-rewriting-tool.php

7
ответ дан Hemal Halari 16 August 2018 в 02:04
поделиться

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

4
ответ дан jacobangel 16 August 2018 в 02:04
поделиться

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

.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.
}
23
ответ дан Jordan S. Jones 16 August 2018 в 02:04
поделиться

Я пытаюсь объяснить эту проблему шаг за шагом в следующем примере.

0) Question

Я пытаюсь спросить вас вот так:

я хочу чтобы открыть страницу, например, facebook profile www.facebook.com/kaila.piyush

, получить идентификатор от url и проанализировать его на файл profile.php и вернуть данные из базы данных и показать пользователю его профиль

обычно, когда мы разрабатываем любой веб-сайт, его ссылка выглядит как www.website.com/profile.php?id=username example.com/weblog/index.php?y=2000&m=11&d=23&id = 5678

Теперь мы обновляем новый стиль, не переписываем, мы используем www.website.com/username или example.com/weblog/2000/11/23/5678 как permalink

http://example.com/profile/userid (get a profile by the ID) 
http://example.com/profile/username (get a profile by the username) 
http://example.com/myprofile (get the profile of the currently logged-in user)

1) .htaccess

Создайте файл .htaccess в корневой папке или обновите существующий:

Options +FollowSymLinks
# Turn on the RewriteEngine
RewriteEngine On
#  Rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php

Что это делает?

Если запрос предназначен для реального каталога или файла (который существует на сервере), index.php не обслуживается, иначе каждый URL перенаправляется на index.php.

2) index.php

Теперь мы хотим знать, что t для запуска, поэтому нам нужно прочитать URL:

В index.php:

// index.php    

// This is necessary when index.php is not in the root folder, but in some subfolder...
// We compare $requestURL and $scriptName to remove the inappropriate values
$requestURI = explode(‘/’, $_SERVER[‘REQUEST_URI’]);
$scriptName = explode(‘/’,$_SERVER[‘SCRIPT_NAME’]);

for ($i= 0; $i < sizeof($scriptName); $i++)
{
    if ($requestURI[$i] == $scriptName[$i])
    {
        unset($requestURI[$i]);
    }
}

$command = array_values($requestURI);
With the url http://example.com/profile/19837, $command would contain :

$command = array(
    [0] => 'profile',
    [1] => 19837,
    [2] => ,
)
Now, we have to dispatch the URLs. We add this in the index.php :

// index.php

require_once("profile.php"); // We need this file
switch($command[0])
{
    case ‘profile’ :
        // We run the profile function from the profile.php file.
        profile($command([1]);
        break;
    case ‘myprofile’ :
        // We run the myProfile function from the profile.php file.
        myProfile();
        break;
    default:
        // Wrong page ! You could also redirect to your custom 404 page.
        echo "404 Error : wrong page.";
        break;
}

2) profile.php

Теперь в profile.php, мы должны иметь что-то вроде этого:

// profile.php

function profile($chars)
{
    // We check if $chars is an Integer (ie. an ID) or a String (ie. a potential username)

    if (is_int($chars)) {
        $id = $chars;
        // Do the SQL to get the $user from his ID
        // ........
    } else {
        $username = mysqli_real_escape_string($char);
        // Do the SQL to get the $user from his username
        // ...........
    }

    // Render your view with the $user variable
    // .........
}

function myProfile()
{
    // Get the currently logged-in user ID from the session :
    $id = ....

    // Run the above function :
    profile($id);
}
11
ответ дан Piyush 16 August 2018 в 02:04
поделиться
  • 1
    спасибо за подробный пост, я всегда хотел узнать, как сайты, такие как wordpress, генерируют красивые URL-адреса и могут обращаться к ним без редактирования файла htaccess каждый раз, спасибо – AMB 11 May 2015 в 03:12
  • 2
    Это именно то, что я искал. – Aiapaec 19 December 2017 в 14:45

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

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

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

Это RESTful framework в PHP

-3
ответ дан ryanday 16 August 2018 в 02:04
поделиться
  • 1
    Технически я полагаю, что вы правы, но если OP уже не опытен с идеей REST, даже чтение этой статьи в Википедии гораздо больше, чем нужно для решения этой проблемы. Вызов всей парадигмы программирования является излишним для этой ситуации. – David Z 1 May 2009 в 20:26
  • 2
    В самом деле? Я не думаю, что его вопросы были точно «Как мне сделать profile.php? U = 12345 goto / profile / 12345», я интерпретировал это как общее «Как это делается в производственных средах?». Я думаю, что полезно знать, что там есть парадигма, и не имеет файла .htaccess, полного перенаправления, когда есть правильный способ решения этой проблемы. – ryanday 1 May 2009 в 20:37

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

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

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

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

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

0
ответ дан Shabbyrobe 16 August 2018 в 02:04
поделиться
Другие вопросы по тегам:

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