Создание сервиса 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.
?>