Я хочу иметь «красивые» и ориентированные на SEO URL-адреса на моем сайте.
Я создал свой собственный крошечный фреймворк для этого сайта, и почти все уже завершено.
Одна вещь, которую я все еще озадачиваю, – это красивая / SEO-система URL, которую я буду использовать. Я знаю, что есть много способов добиться этого, и я ищу, чтобы сбалансировать лучшие практики / простоту реализации на этом.
Пока я думаю, чтобы все URL-адреса сайта указывали на определенный файл PHP (скажем, index.php), который будет содержать словарь файлов / URL-адресов, который направит трафик на правильный файл.
Я действительно не уверен, что это хороший подход … У кого-то есть лучший способ сделать это? Единственное, чего я действительно хочу избежать, это сделать это только в .htaccess …
Вам понадобится файл .htaccess (но вам не нужно менять его каждый раз, когда вы добавляете страницу):
RewriteEngine On #RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
Теперь в вашем index.php
вы можете получить запрошенный url в $_GET['url']
, сопоставить его с правильным файлом и затем включить его.
Примечание . Поместите комментарий RewriteBase
там, если вам нужно раскомментировать его, как этого требуют некоторые конфигурации.
Ну, есть несколько способов сделать это.
Широко принятый использует .htaccess, который, как вы сказали, не хочет использовать. ОК.
У вас все еще есть несколько вариантов:
Ну, все, что вам нужно, может быть смешано с вашей реализацией.
Вы можете найти хорошую статью для этого в отдельном списке.
http://www.alistapart.com/articles/succeed/
В этой статье решение представляет собой смесь:
сначала проверьте, существует ли файл (например, «about-us.php»); если да, укажите содержимое файла, иначе
проверьте db для этого запроса (в качестве подсказки вы можете иметь поле с именем «friendlyURL» в ваших основных таблицах контента). если существует, извлекать и отображать, иначе
показать страницу 404. как подсказка для этого, сохраняя функцию SEO в виду, я бы порекомендовал вам иметь sitemap xml. Если страница не найдена, вы можете проверить карту сайта, если это не сломанный URL, например:
http://yourdomain.net/shoes/male/bro
вы можете проверить, есть ли какой-либо URL-адрес: http://yourdomain.net/shoes/male/brown
и предлагайте его своим клиентам / посетителям. Вместе с:
http://yourdomain.net/shoes/male/
также ссылку для вашей HTML-карты сайта, и если у вас есть функция поиска на вашем сайте, также используйте ее, отобразите ссылку для пользователя, перейдите на страницу поиска с этим запросом.
http://yourdomain.net/search?q=shoes+male+bro
ИЛИ
[input type = "text" name = "q" value = "shoe + male + bro"];
И еще один дополнительный технический совет: используйте функцию полнотекстового поиска вашего db, если она доступна.
Интересное чтение приходит от Расмуса Лердорфа, создателя PHP: http://lerdorf.com/lca04.pdf (проверьте страницу 34, около 404 перенаправления).
Направляя все в index.php, а затем маршрутизация, есть хороший, чистый способ сделать это. У меня что-то очень похожее, я:
Например, просмотр:
http://www.blah.com/shop/browse/cakes
Вызов index.php, который будет включать shop.php и создать экземпляр класса Shop. Попробовал бы вызвать функцию в Shop под названием browse и передал бы ей параметр «торты».
Это упрощенный пример, но вы поняли эту идею. Консолидация конфигурации делает URL-адреса и код чистым.
Я думаю, вы сказали, что страницы могут быть статичными, не так ли? Ну, иногда я использую следующее решение:
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, если вы планируете менять регулярное выражение.
Ура!
Чтобы добавить еще одну альтернативу, вы можете проверить директиву RewriteMap .
Альтернативой маршрутизации через страницу index.php и правилами перезаписи и т. Д., Которые люди публиковали, является мультивизия . Это самый простой способ сделать то, что вы хотите, и позволит вам конвертировать ваш сайт, чтобы использовать симпатичные / SEO-ссылки очень легко и интуитивно, без сложных правил htaccess и необходимости поддерживать маршруты (в .htaccess или db) / сложном сайте состав.
Чтобы включить multiviews, отредактируйте файл 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 / переменная / переменная / переменная / переменная !
То, что делает apache, ищет ближайший сопоставление файлов для отправленного ему пути и вызова этого файла. Все, что требуется для использования этих URL-адресов, – это функция внутри вашей структуры для извлечения данных из URL-адреса. Вот базовая функция, которую я использовал до того, которая может быть адаптирована к вашим потребностям, она извлекает переменную в URL в позиции $:
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 и хорошо знать / рассмотреть ,
Очень красивая маршрутизация в Nette Framework см. На сайте nette.org. Как и ваша идея, каждый URL-адрес отправляется index.php. И есть маршрутизаторы, которые направляют то, что произойдет, и т. Д. http://api.nette.org/2.0/Nette.Application.SimpleRouter.html
вы, вероятно, ищете что-то вроде mod-rewrite таким образом, что у вас будет ссылка, которая выглядит как 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: ???»)
Если вам нужны URL-адреса seo, есть довольно хорошая функция, связанная с (out) htaccess! он будет использоваться как $ _POST & $ _GET. используйте его как $ _SEO !! .. он использует / query-value / query2-value2 / $ _SEO ['query'] вернет 'значение'
проверьте его по адресу: http://mohammed-alashaal.blogspot.com/2013/07/php-seo-uri-without-htaccess.html