Как преобразовать ссылку вида community.php?name=...&author=... в формат community/name/author? на PHP?

Какой процесс необходимо выполнить, чтобы изменить структуру URL на моем сайте с community.php?author=...&name=... на community/author/name с использованием .htaccess? Я уже попытался реализовать это с помощью рекомендаций из ChatGPT, но не получил рабочего решения. В данный момент у меня следующий код в файле .htaccess: <br/> .htaccess: <br/> <pre><code>RewriteEngine On
RewriteBase /communities/
RewriteRule ^community/([^/]+)/([^/]+)$ community.php?author=$1&amp;name=$2 [L]</code></pre> <br/> и в файле community.php: <br/> <pre><code>&lt;br&gt;
&lt;?php&lt;br&gt;
    echo $_GET["author"] . "&lt;br&gt;" . $_GET["name"];&lt;br&gt;
?&gt;&lt;br&gt;</code></pre> <br/> Однако при переходе по URL вида community/.../... у меня возникает ошибка 404. Каковы возможные причины этой ошибки и как ее исправить?
  • 4 ноября 2024 г. 8:02
Ответы на вопрос 2
Ваша ошибка 404 может возникать по нескольким причинам. Давайте проверим правильность конфигурации вашего файла `.htaccess`. Вижу несколько моментов, которые могут требует корректировок.

### 1. Проверка структуры URL

Сначала убедимся, что структура URL действительно соответствует вашему `.htaccess`. Так как у вас правило `RewriteBase /communities/`, это подразумевает, что ваш сайт находится в директории `/communities/`. Если нет, настройте `RewriteBase` соответствующим образом. Если правила файла .htaccess находятся в корне вашего сайта, просто уберите эту строку, так будет просто:

```apache
RewriteEngine On
RewriteRule ^community/([^/]+)/([^/]+)$ community.php?author=$1&name=$2 [L]
```

### 2. Убедитесь, что модуль mod_rewrite включен

Убедитесь, что в вашем сервере Apache включен модуль `mod_rewrite`. Если вы имеете доступ к файлу конфигурации сервера (обычно `httpd.conf` или аналогичный), ищите строку:

```apache
LoadModule rewrite_module modules/mod_rewrite.so
```

Если она закомментирована, раскомментируйте её, убрав символ `#` в начале строки.

### 3. Проверьте директории и файлы

Убедитесь, что `.htaccess` находится в правильной директории (обычно это корень вашего сайта или подпапка, если ваш сайт находится в подпапке) и что ваш `community.php` действительно находится в той же директории, что и `.htaccess`.

### 4. Полная проверка запроса

Затем проверим, правильно ли работает ваш PHP код:

```php
<?php
if (isset($_GET["author"]) && isset($_GET["name"])) {
    echo htmlspecialchars($_GET["author"]) . "<br>" . htmlspecialchars($_GET["name"]) . "<br>";
} else {
    echo "missing parameters.";
}
?>
```

Это дополнение поможет вам отладить, если параметры не передаются.

### 5. Попробуйте доступиться к URL

После внесения всех изменений попробуйте снова обратиться к URL `community/author/name` и убедитесь, что вы используете правильные имена авторов и названия, которые должны быть проверены, чтобы убедиться, что они не связаны с другими ресурсами сайта.

### 6. Логи сервера

Если все ещё получаете ошибку 404, посмотрите в логи вашего веб-сервера (обычно это `error_log`), чтобы получить больше информации о том, почему возникла ошибка.

### Пример готового `.htaccess`

Вот пример исправленного файла `.htaccess`:

```apache
RewriteEngine On

# Если ваш сайт находится не в подкаталоге, уберите эту строку
RewriteBase /

RewriteRule ^community/([^/]+)/([^/]+)$ community.php?author=$1&name=$2 [L,QSA]
```

### Заключение

После этих шагов ваш сайт должен корректно обрабатывать запросы в формате `community/author/name` и перенаправлять их на `community.php`, передавая параметры `author` и `name`.
GET  не является частью урла в mod_rewrite в RewriteRule он физически не может попасть 
Ваш вариант RewriteCond %{QUERY_STRING}
Вот тебе генератор

https://donatstudios.com/RewriteRule_Generator
Похожие вопросы