Переписать URL в PHP - PullRequest
       0

Переписать URL в PHP

1 голос
/ 01 декабря 2011

Я хотел бы переписать следующий URL

www.mysite.com / mypage.php? = Идентификатор пользователя ca49b6ff-9e90-446e-8a92-38804f3405e7 & = 037a0e55 Идентификатор роли-d10e-4302-951e-a7864f5e563e

до

www.mysite.com / MyPage / Идентификатор_пользователя / ca49b6ff-9e90-446e-8a92-38804f3405e7 / Идентификатор роли / 037a0e55-d10e-4302-951e-a7864f5e563e

Проблема в том, что файл php может быть любым. Нужно ли указывать правила для каждой страницы в файле .htaccess?

как я могу сделать это, используя механизм переписывания в php?

Ответы [ 4 ]

2 голосов
/ 01 декабря 2011

Чтобы заставить правило перезаписи работать, вы должны добавить это в ваши конфиги apache (в блоке virtualhost):

RewriteEngine On
RewriteRule ^([^/]*)/userid/([^/]*)/roleid/(.*)$ /$1.php?userid=$2&roleid=$3 [L,NS]

RewriteRule в основном принимает два аргумента. Первый - это регулярное выражение, описывающее, чему оно должно соответствовать. Здесь он ищет пользователя, запрашивающего URL-адрес типа /<mypage>/<pid>/roleid/<rid>. Второй аргумент - это то, куда он должен идти на вашем сервере, чтобы выполнить запрос (в данном случае это ваш php-файл, который выполняет запрос). Он ссылается на группы в регулярном выражении, используя $1, $2 и $3.

0 голосов
/ 01 декабря 2011

Нет, вам не нужно отдельное правило для каждого php-файла, вы можете сделать переменную filename в вашем регулярном выражении примерно такой:

RewriteRule ^(a-z0-9)/userid/([a-z0-9].+)/roleid/([a-z0-9].+)$ $1.php?userid=$2&roleid=$3
0 голосов
/ 01 декабря 2011

Если вы хотите переписать последний URL-адрес, введенный в браузере, в первый формат, вам следует использовать файл .htaccess.

Однако, если вы хотите создать красивые URL-адреса в PHP (например, для использования в тегах ссылок), тогда у вас есть два варианта.

  • Во-первых, вы можете просто создать URL-адрес напрямую (вместо конвертации), что, на мой взгляд, предпочтительнее.
  • Во-вторых, вы можете переписать первый (безобразный) URL-адрес на довольно последний URL-адрес. Затем вам нужно будет использовать preg_replace () в PHP. См. http://php.net/manual/en/function.preg-replace.php для получения дополнительной информации. По сути, вы хотели бы использовать что-то вроде

    $rewrittenurl = preg_replace("@mysite\.com\/mypage.php?userid=(([a-z0-9\-]).+)\&roleid=(([a-z0-9\-]).+)$", "mysite.com/userid/$1/roleid/$2", $firsturl);
    

Удачи!

0 голосов
/ 01 декабря 2011
    RewriteEngine on
    RewriteBase /
    RewriteRule ^mypage\/userid\/(([a-z0-9]).+)\/roleid\/(([a-z0-9]).+)$ www.mysite.com/mypage.php?userid=$1&roleid=$2
...