Создание одного URL-адреса с помощью htaccess

#php #apache #.htaccess

#php #apache #.htaccess

Вопрос:

Возможно ли создать один URL-адрес с помощью htaccess? Ниже приведены примеры собственных URL-адресов, которые мне нужны.

пример:

localhost / блог (категория)

localhost/ часто задаваемые вопросы (содержание)

localhost /book (тег)

   RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
     
    RewriteRule ^(en|de|tr)/?$ ?lang=$1 [QSA,NC,L]
    
    RewriteCond $1 !^(css|js|images|inc|lang)
    
    RewriteRule ^([0-9a-zA-Z-_] )-([0-9] )$ article.php?url=$1amp;id=$2 [L,QSA]
    
    RewriteRule ^([0-9a-zA-Z-_] )$  article.php?caturl=$1amp;catid=$2 [L,QSA]

    RewriteRule ^([0-9a-zA-Z-_] )$  tag.php?tagurl=$1amp;id=$2 [L,QSA]
 

Комментарии:

1. Это возможно, но вам понадобится один PHP-скрипт, а затем определите в скрипте, является ли параметр тегом, контентом или категорией. И, надеюсь, вы никогда не получите тег с именем blog

2. Почему бы не использовать localhost/tag/XYZ and localhost/category/XYZ ?

Ответ №1:

Поскольку нет «основных» различий, которые могли бы указать вам, что запрошенный URL-адрес указывает на определенный тип контента, я предложу 2 подхода :

1. Определите префиксы для маршрутов категорий, тегов и статей

 RewriteRule ^/category/([0-9a-zA-Z-_] )$  article.php?caturl=$1amp;catid=$2 [L,QSA]

RewriteRule ^/tag/([0-9a-zA-Z-_] )$  tag.php?tagurl=$1amp;id=$2 [L,QSA]

RewriteRule ^/article/([0-9a-zA-Z-_] )-([0-9] )$ article.php?url=$1amp;id=$2 [L,QSA]
 

Перенаправить все URL-адреса на php-скрипт, который будет запрашивать базу данных и искать тип содержимого по URL

 RewriteRule ^([0-9a-zA-Z-_] )-([0-9] )$ content.php?url=$1 [L,QSA]
 

а затем внутри этого content.php выполняйте запросы к таблице категорий,
если совпадений нет, поэтому ищите в таблице тегов … и так далее…
пока нет совпадений, перенаправляйте на страницу 404.
После того, как вы найдете соответствующий тип контента, вы можете включить соответствующий php-файл, чтобы продолжить обработку этого запроса.