Создание сервиса URL Shortner

Это мой первый вопрос:

Я создал службу URL Shortner в PHP. Он работает полностью без проблем, но возникла проблема:

Кто-то, кто хочет получить доступ к его URL, должен напечатать: MyDomain.com/go.php?u=key Здесь я попытался удалить расширение .php, настроив apache, и работал. Теперь это так:MyDomain.com/go?u=key

но некоторые сервисы, такие как TinyUrl.com, работают так: TinyURL.com/key!!!!

Как я могу получить это в php?

большое спасибо.

3 ответа

Решение

Вы в основном используете mod_rewrite.

С mod_rewrite вы можете сказать, что все запросы, которые похожи

www.example.com/[A-Za-z1-9]

перенаправлены на:

www.example.com/shorturl.php?key=$1

В то время как $1 - извлеченная переменная из запрошенного URL.

Нет никакого правильного способа сделать это с чистым PHP.

Правило перезаписи может выглядеть так:

RewriteRule ^([A-Za-z1-9]*)$ shorturl.php?key=$1 [L]

Я бы исключил файлы, которые действительно существуют, от перезаписи, используйте для этого RewriteCond.

Это можно сделать как здесь:

# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
# If the request is not for a valid link
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([A-Za-z1-9]*)$ shorturl.php?key=$1 [L]

(Источник: anubhava в RewriteCond, чтобы пропустить правило, если файл или каталог существует)

Создать файл.htaccess, чтобы перенаправить любой запрос на ваш домен в один файл, скажем, go.php

так что в.htacess делай так:

<IfModule mod_rewrite.c>
RewriteEngine On

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

RewriteRule ^(.*)$ go.php?key=$1 [PT,L]

</IfModule>

Это перенаправление любого запроса вроде mydomain.com/userkey на mydomain.com/go.php?key=userkey

Теперь в вашем index.php вы можете сделать свой логин перенаправления.

<?php 

$key = $_GET['key'];

// your logic here. 

?>

Этот реф решит вашу проблему.

Другие вопросы по тегам