Создать Catch-All Handler в PHP? - PullRequest
5 голосов
/ 07 марта 2011

Я хочу, чтобы PHP-файл ловил и управлял тем, что произойдет, когда пользователи посещают:

http://profiles.mywebsite.com/sometext

sometext меняется.

например. Это может быть someuser , это может быть john и т. Д., Затем я хочу файл PHP для обработки запросов из этой структуры.

Моя главная цель - иметь определенный PHP-файл для перенаправления пользователей моего сайта в соответствующие профили, но их профили отличаются от структуры URL. Я стремлюсь предоставить своим пользователям своего рода легкие для запоминания URL-адреса профиля.

Спасибо тем, кто ответит!

Ответы [ 5 ]

15 голосов
/ 07 марта 2011

Либо в файлах конфигурации Apache [директивы VirtualHost или Directory], либо в файле .htaccess вставьте следующую строку:

Options -MultiViews

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L,NC,QSA]
</IfModule>

Он будет молча перенаправлять все входящие запросы, которые не соответствуют действительному имени файла или директории (RewriteCond в приведенном выше коде убедитесь в этом), в файл index.php. Кроме того, как вы видите, опция MultiViews также должна быть отключена, чтобы перенаправление работало - обычно она конфликтует с этими двумя RewriteCond, которые я там поставил.

Внутри index.php вы можете получить доступ к данным REQUEST_URI через переменную $_SERVER['REQUEST_URI']. Вы не должны передавать какие-либо URI через GET, так как это может привести к нежелательному загрязнению ваших данных Query-String, поскольку параметр [QSA] в нашем RewriteRule активен.

4 голосов
/ 07 марта 2011

Вы должны использовать правило перезаписи ..

В apache (.htaccess) что-то вроде этого:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
</IfModule>

Тогда в вашем index.php вы можете прочитать $ _GET ['url'] в вашем php-коде.

0 голосов
/ 07 марта 2011

Очевидный способ сделать это был бы через errorDocument 404 - избавляет от всего, что возиться с mod_rewrite.

0 голосов
/ 07 марта 2011

Если вы не слышали о MVC, его время, когда вы его слышите, начните с CodeIgniter, его самого простого и довольно быстрого, используйте контроллер по умолчанию, и вы можете иметь URL-адреса вроде
domain.com/usernam/profile
domain.com/usernam/profile/edit
domain.com/usernam/inbox
domain.com/usernam/inbox/read/messageid Или используйте .htaccess с умом

0 голосов
/ 07 марта 2011

Вы можете использовать файл .htaccess (http://httpd.apache.org/docs/1.3/howto/htaccess.html)), чтобы переписать ваш URL-адрес в нечто вроде profiles.websites.com/index.php?page=sometext. Затем вы можете делать то, что хотите, с некоторым текстом в индексе.PHP.

...