Как я могу сделать дружественные URL для своего сайта? - PullRequest
3 голосов
/ 30 января 2009

Пока я включаю все в index.php:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]

Есть также страницы, где я использую $ _GET вот так:

SELECT * FROM news WHERE id = ".intval($_GET['id'])

Если я хочу просмотреть новости, я набираю news?id=1 вместо ?page=news&id=1 но я хочу иметь возможность использовать news/1.

Должен ли я добавить правило перезаписи для каждой страницы, где я использую GET? Или есть лучший способ?

Надеюсь, мне не нужно делать это для всех моих страниц.

Ответы [ 4 ]

5 голосов
/ 30 января 2009
RewriteRule ^([^/]*)/?([^/]*)$ index.php?page=$1&id=$2 [QSA,L]

Должно позволять вводить ваши страницы как www.example.com/page/id

Большинство ваших страниц будут выглядеть как www.example.com/index.php?page=text&id=, но это ни на что не должно повлиять.

2 голосов
/ 30 января 2009

это единственное правило должно разрешать как с, так и без идентификаторов (а также делает косые черты необязательными):

RewriteRule ^([^/]*)(/([^/]*)/?)?$ index.php?page=$1&id=$3 [QSA,L]

, если вы не хотите разрешать / и //, измените * на + '

0 голосов
/ 30 января 2009

Попробуйте следующие правила:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index.php?page=$1 [QSA,L]
RewriteRule ^([^/]+)/(\d+)$ index.php?page=$1&id=$2 [QSA,L]

Или вы можете разобрать запрошенный путь с помощью PHP:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ index.php [QSA,L]


// remove the query string from the request URI
$_SERVER['REQUEST_URI_PATH'] = preg_replace('/\?.*/', $_SERVER['REQUEST_URI']);
// removes leading and trailing slashes and explodes the path
$segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));
var_dump($segments);
0 голосов
/ 30 января 2009

Просто используйте news / 1, который уже будет работать с вашими текущими правилами перезаписи и помещает это значение в параметр страницы. Затем создайте общий диспетчер URL-адресов в вашем index.php, который анализирует значение параметра страницы на части компонента и решает, что делать на основе этих частей.

Например, действительно простой универсальный диспетчер просто разделил бы параметр страницы на «/», а затем вызвал бы обработчик на основе значения первого элемента, возвращенного из разбиения (например, «новости»), передавая остаток части (например, «1») в качестве аргументов обработчику.

РЕДАКТИРОВАТЬ: грамматика и ссылка на учебные пособия по диспетчеризации URL в PHP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...