Каков хороший способ создать систему URL SEO в PHP? - PullRequest
2 голосов
/ 01 октября 2010

Я хочу, чтобы на моем сайте были «красивые» и ориентированные на SEO URL-адреса.

Я создал собственную крошечную основу для этого сайта, и почти все уже готово.

ОдинЯ все еще озадачен тем, что я буду использовать красивую / SEO систему URL.Я знаю, что есть много способов добиться этого, и я пытаюсь найти баланс между лучшими практиками и простотой реализации.

Пока я думаю, что все URL-адреса сайта должны указывать на конкретный PHPфайл (скажем, index.php), который будет содержать словарь файла / URL, который будет направлять трафик к нужному файлу.

Я действительно не уверен, что это хороший подход ... У кого-то есть лучший способсделать это?Единственное, чего я действительно хочу избежать, это делать только в .htaccess ...

Ответы [ 9 ]

5 голосов
/ 02 октября 2010

Вам понадобится файл .htaccess (но вам не нужно будет менять его при каждом добавлении страницы):

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

Теперь в вашем index.php вы можете получить доступ к запрошенному URL в $_GET['url'], сопоставить его с правильным файлом, а затем включить it.

Примечание : добавьте комментарий RewriteBase на случай, если вам понадобится раскомментировать его, поскольку это требуется для некоторых конфигураций.

2 голосов
/ 09 октября 2010

Я думаю, вы сказали, что страницы могут быть статичными, верно?Ну, иногда я использую решение:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^([a-zA-Z0-9-_]+)/?$ files/$1.php [NC,L]
RewriteRule ^$ files/index.php [NC,L]

Таким образом, вы не можете столкнуться с такими проблемами, как люди, которые получают доступ к файлам, таким как .htpasswd или к конфиденциальным данным.Страница / about приведет к /files/about.php

Создайте каталог с файлами и новый PHP (или HTML, XML, что угодно - просто измените его или добавьте в файл .htaccess).Ничего, кроме этого.

Дайте мне знать, если это хорошо для вас:)

PS: Если страницы содержат контент из базы данных (например, статьи в блоге), это может быть дажепроще использовать дополнительный параметр и придерживаться .htaccess:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^([0-9-_]+)/([a-zA-Z0-9-_]+)/?$ files/article.php?id=$1 [NC,L]
RewriteRule ^([a-zA-Z0-9-_]+)/?$ files/$1.php [NC,L]
RewriteRule ^$ files/index.php [NC,L]

Таким образом, правила, о которых я говорил в первый раз, применяются, но когда у вас есть URL, такой как / 3 / my_new_article, он будет указывать на / files /article.php? id = 3

Вы также должны были бы проанализировать заголовок статьи с помощью PHP, чтобы он принимал только символы в регулярном выражении, выглядел красиво и также содержал только допустимые символы URL, если вы планируетеизменить регулярное выражение.

Ура!

2 голосов
/ 05 октября 2010

Направление всего на index.php, а затем маршрутизация оттуда - хороший, чистый способ сделать это. У меня есть нечто очень похожее, я:

  1. Направьте все в index.php в .htacess.
  2. В index.php я разделил URL на '/', чтобы получить массив
  3. Первый элемент массива - это имя класса для вызова.
  4. Второй элемент - это функция класса для вызова.
  5. При необходимости оставшиеся элементы являются параметрами.

Например, просмотр:

www.blah.com / магазин / Просмотр / торты

Будет вызывать index.php, который будет включать shop.php и создавать экземпляр класса с именем Shop. Попытался бы вызвать функцию Shop с именем browse и передал бы ей параметр "cakes".

Это упрощенный пример, но вы поняли идею. Соглашение о конфигурации делает URL-адреса и код чистыми.

2 голосов
/ 05 октября 2010

Ну, есть несколько способов сделать это.

Широко распространено использование .htaccess, которое вы сказали не хотите использовать. OK.

У вас еще есть несколько вариантов:

  • Использование таблицы базы данных для сопоставления всего одного.
  • Использование подпрограммы для проверки существующих файлов.
  • Использование расширенной XML-карты сайта.
  • Использование системы кеширования.

Что ж, все вышеперечисленное можно смешать в вашей реализации, если хотите.

Вы можете найти хорошую статью для этого в отдельном списке.

http://www.alistapart.com/articles/succeed/

На этой статье решение представляет собой смесь:

сначала проверьте, существует ли файл (например, "about-us.php"); если да, включите содержимое файла, иначе

проверьте db для этого запроса (в качестве подсказки у вас может быть поле с именем friendlyURL в ваших основных таблицах содержимого). если существует, извлеките и отобразите, иначе

показать страницу 404. В качестве подсказки для этого, имея в виду функцию SEO, я бы порекомендовал вам иметь карту сайта xml. Если страница не найдена, вы можете проверить карту сайта, если не битый URL, например:

http://yourdomain.net/shoes/male/bro

вы можете проверить, если какой-то URL, как: http://yourdomain.net/shoes/male/brown

и предложите это своим клиентам / посетителям. Вместе с:

http://yourdomain.net/shoes/male/

http://yourdomain.net/shoes/

также ссылка на ваш HTML-файл Sitemap, и если у вас есть функция поиска на вашем сайте, также используйте ее, чтобы отобразить ссылку для перехода пользователя на страницу поиска с этим запросом.

http://yourdomain.net/search?q=shoes+male+bro

ИЛИ

[input type = "text" name = "q" value = "shoe + male + bro"];

И еще один дополнительный технический совет: используйте функцию полнотекстового поиска в вашей БД, если она доступна.

Интересное чтение пришло от Расмуса Лердорфа, создателя PHP: http://lerdorf.com/lca04.pdf (см. Стр. 34, около 404 перенаправлений).

1 голос
/ 11 октября 2010

Очень симпатичная маршрутизация в Nette Framework, см. Nette.org.Как и ваша идея, каждый URL-адрес идет в index.php.И есть маршрутизаторы, которые управляют тем, что будет происходить и т. Д. http://api.nette.org/2.0/Nette.Application.SimpleRouter.html

1 голос
/ 10 октября 2010

Альтернативой маршрутизации через вашу страницу index.php и правилами переписывания и т. Д., Которые публикуют люди, является multiviews . Это, безусловно, самый простой способ сделать то, что вы хотите, и он позволит вам действительно легко и интуитивно конвертировать ваш сайт для использования красивых / seo URL без сложных правил htaccess и необходимости поддерживать маршрутизацию (в .htaccess или db) / сложный сайт структура.

Чтобы включить множественные просмотры, отредактируйте файл httpd.conf или vhost для каталога, для которого вы хотите его включить: (если вы используете общий хостинг, это все равно возможно, если ваш хост позволяет вам выполнять локальное переопределение в вашем Файл .htaccess - Options +Multiviews)

<Directory /var/www/>
    Options +Multiviews
</Directory>

... И тогда все готово! Теперь рассмотрим пример этого в действии:

http://{yoursite}/page.php теперь доступен как http://{yoursite}/page или даже http://{yoursite}/page/variable или даже http://{yoursite}/page/variable/variable/variable/variable!

То, что делает apache, ищет наиболее близкое совпадение файла для пути, отправленного к нему, и вызывает этот файл. Все, что требуется для того, чтобы сделать эти URL-адреса пригодными для использования, - это функция в вашей структуре, предназначенная для извлечения данных из URL-адреса. Вот базовая функция, которую я использовал ранее, которая может быть адаптирована к вашим потребностям, она извлекает переменную в URL в $ position:

function getWebParam($position) {
    static $params;

    if (!$params) {
        $params = explode('/', $_SERVER['PATH_INFO']);        
    }

    return $params[$position];
}

Вы можете адаптировать его для разбора URL-адресов по своему усмотрению (вам не нужно разделять переменные на основе /, page-variable.html также может перенаправлять на page.php), если целевой файл является ближайшим соответствующий файл для введенного URL.

Конечно, есть недостатки в использовании множественных представлений, и это противоречит философии направления всех запросов через ваш файл index.php - но он действительно отвечает на ваш запрос для простоты и не требует поддержки файла htaccess, и это полезно знать о / рассмотреть.

1 голос
/ 07 октября 2010

Просто, чтобы добавить другую альтернативу, вы можете проверить директиву RewriteMap .

0 голосов
/ 08 июля 2013

Если вы хотите, чтобы URL-адреса были довольно полезными для htaccess!он будет использоваться как $ _POST & $ _GET.используйте его как $ _SEO !!.. он использует / query-value / query2-value2 / $ _SEO ['query'] вернет 'value'

, проверьте его по адресу: http://mohammed -alashaal.blogspot.com / 2013 /07 / PHP-сео-Ури без-htaccess.html

0 голосов
/ 01 октября 2010

вы, вероятно, ищете что-то вроде переписывания модов, чтобы у вас была ссылка, похожая на http://my.server.com/my_file_of_this_name
а с mod-rewrite он превратится в http://my.server.com/index.php?path=my_file_of_this_name
где index.php знает, что если путь был переданной переменной, найдите в БД содержимое или страницу, соответствующие «my_file_of_this_name», и либо отобразите его, либо укажите заголовок («location: ???)»

...