Вопрос:

Как упростить URL сайта PHP с помощью правила перезаписи htaccess?

php .htaccess mod-rewrite url-rewriting url-rewrite-module

21 просмотра

2 ответа

6 Репутация автора

Я сделал этот сайт от разработчика на PHP, и теперь все страницы имеют такую ​​структуру URL,

websitename.com/software.php?name=product_name

Единственное, что меняется каждый раз на разных страницах сайта, это только «название продукта», например:

websitename.com/software.php?name=product_name1

websitename.com/software.php?name=product_name2

websitename.com/software.php?name=product_name3

так далее

Я только хочу, чтобы URL был таким:

websitename.com/product_name1

websitename.com/product_name2

websitename.com/product_name3 и так далее ..

Подскажите, пожалуйста, какой код я должен добавить в свой htaccess, чтобы получить такую ​​структуру URL.

Автор: Andrew Hales Источник Размещён: 11.08.2019 04:09

Ответы (2)


0 плюса

971 Репутация автора

От websitename.com/any до websitename.com/software.php?name=any используйте эти правила в верхней части вашего .htaccess файла

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /software.php?name=$1 [L]
</IfModule>

Но более полезной структурой URL (программное обеспечение только для продуктов) будет websitename.com/software/any-product-name to websitename.com/software.php?name=any-product-name

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^software\/(.*)$ /software.php?name=$1 [L]
</IfModule>

Для оптимизированных для SEO URL используйте «-» вместо «_» в названиях продуктов.

Автор: JarekBaran Размещён: 11.08.2019 07:45

0 плюса

32248 Репутация автора

Это должно указать вам правильное направление:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*)$ /software.php?name=$1 [END]

В случае, если вы получили внутреннюю ошибку сервера (статус http 500), используя приведенное выше правило, есть вероятность, что вы используете очень старую версию http-сервера apache. В этом случае вы увидите определенный намек на неподдерживаемый [END]флаг в файле журнала ошибок http-серверов. Вы можете попытаться обновить или использовать более старый [L]флаг, он, вероятно, будет работать так же в этой ситуации, хотя это немного зависит от ваших настроек.

Это правило также будет работать в конфигурации хоста http-серверов или внутри файла динамической конфигурации (файл ".htaccess"). Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http. Если вы используете динамический файл конфигурации, вам нужно позаботиться о том, чтобы его интерпретация была включена вообще в конфигурации хоста и чтобы он находился в DOCUMENT_ROOTпапке хоста .

И общее замечание: вы всегда должны предпочитать размещать такие правила в конфигурации хоста http-серверов вместо использования файлов динамической конфигурации (".htaccess"). Эти динамические конфигурационные файлы добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).


ОБНОВЛЕНИЕ: В комментарии ниже вы просите дополнительно перенаправить запрос на оригинальный, а не переписанный URL. Вот расширенная версия, которая делает это:

RewriteEngine On

RewriteCond %{QUERY_STRING} (?:^|&)name=([^&]+)(?:&|$)
RewriteRule ^/?software\.php$ /%1 [R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*)$ /software.php?name=$1 [END]

Хорошей идеей будет начать с временного перенаправления 302 и изменить его только на постоянное перенаправление 301 позже, если вы уверены, что все настроено правильно. Это предотвращает проблемы с кэшированием при попытке ...

Автор: arkascha Размещён: 11.08.2019 10:14
Вопросы из категории :
32x32