Перезапись URL в PHP без htaccess - PullRequest
21 голосов
/ 24 января 2010

Сайт работает на веб-хосте, где у нас нет доступа к файлу .htaccess. Однако я хочу переписать URL-адреса для удобных для пользователя URL-адресов.

например. Оригинальный URL

www.example.com/file?q=name

ожидаемый URL

www.example.com/file/name

Ответы [ 5 ]

16 голосов
/ 24 января 2010

Как говорили другие люди, просто используйте ссылки вроде /index.php/nice/looking/url.
«Index.php» в середине URL-адреса может выглядеть немного странно, но я не думаю, что можно было бы выглядеть лучше без .htaccess

В противном случае вы можете попросить своего хостера перенаправить любой URL-адрес в /index.php, чтобы можно было перезаписать URL-адрес, не указав /index.php в своем URL-адресе.

Тогда вы можете просто использовать соответствие регулярному выражению, чтобы определить, какой файл включить.
preg_match('@[/]{1}([a-zA-Z0-9]+)@', $_SERVER["PATH_INFO"], $matches) ($ match будет содержать все «части» URL в массиве)

Будьте внимательны с включением файлов, используйте белый список 1015 *, чтобы быть уверенным, что никто не сможет загрузить внутренние файлы.

5 голосов
/ 24 января 2010

, как предложил Аликс Аксель, вы можете использовать

www.example.com/index.php/file/name

, тогда вы будете использовать $_SERVER['REQUEST_URI'] для обработки URL.

4 голосов
/ 24 января 2010

Лучше всего, чтобы URL-адреса были такими:

www.example.com/index.php/file/name

Вы будете переписывать свой код PHP, хотя.

3 голосов
/ 24 января 2010

Если у вас есть сервер Apache и AcceptPathInfo , вы можете использовать URL-адрес, который вы написали. Запрос /file/name будет автоматически переписан в /file со значением PATH_INFO /name, если /file является обычным файлом.

0 голосов
/ 13 января 2017

Попробуйте это

www.example.com/file?q=name

до

www.example.com/name (лучше, чем www.example.com/file/name)

Откройте .htaccess из корневой папки вашего проекта и добавьте этот код

Options +FollowSymLinks

RewriteEngine On
RewriteRule \.(js|css|jpe?g|png|gif)$ - [L]


RewriteRule "^([ \w-]+)/?$" /file?q=$1 [L,QSA]

Это решает вашу проблему. См. Сообщение о том, как переписать URL в .htaccess

...