Назад | Перейти на главную страницу

Попытка заставить работать дружественные URL-адреса

Я работал над тем, чтобы заставить работать удобные URL-адреса.

У меня на сайте есть примерно такое:

http://www.example.com/blog/newpost.php?id=Reasons+to+Use+a+Small+Business+Consultant

Я бы хотел, чтобы это выглядело примерно так:

http://www.example.com/blog/Reasons+to+Use+a+Small+Business+Consultant

Я попытался отредактировать httpd.conf и .htaccess, но не получил ответа.

httpd.conf:

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / http://www.example.com/
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /var/www/sites/example
    ServerName www.example.com
    <Directory /var/www/sites/example/blog>
        Options FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

.htaccess:

RewriteEngine On
RewriteRule ^blog/Reasons+to+Use+a+Small+Business+Consultant$ blog/newpost.php?id=Reasons+to+Use+a+Small+Business+Consultant

Перезапись предупреждений LogLevel: trace3

Журнал трассировки говорит, что применяется шаблон, но я все еще вижу:

http://www.example.com/blog/newpost.php?id=Reasons+to+Use+a+Small+Business+Consultant

[Thu Oct 25 18:39:17.821619 2018] [rewrite:trace3] [pid 27933] mod_rewrite.c(470): [client 123.321.64.56:58790] 123.321.64.56 - - [www.example.com/sid#558610b6a4a8][rid#558610d3d740/initial] [perdir /var/www/sites/example/blog/] strip per-dir prefix: /var/www/sites/example/blog/newpost.php -> newpost.php, referer: http://www.example.com/blog/
[Thu Oct 25 18:39:17.821648 2018] [rewrite:trace3] [pid 27933] mod_rewrite.c(470): [client 123.321.64.56:58790] 123.321.64.56 - - [www.example.com/sid#558610b6a4a8][rid#558610d3d740/initial] [perdir /var/www/sites/example/blog/] applying pattern '^blog/Reasons+to+Use+a+Small+Business+Consultant$' to uri 'newpost.php', referer: http://www.example.com/blog/
[Thu Oct 25 18:39:17.821654 2018] [rewrite:trace1] [pid 27933] mod_rewrite.c(470): [client 123.321.64.56:58790] 123.321.64.56 - - [www.example.com/sid#558610b6a4a8][rid#558610d3d740/initial] [perdir /var/www/sites/example/blog/] pass through /var/www/sites/example/blog/newpost.php, referer: http://www.example.com/blog/

Вероятно, это сработает:

RewriteEngine On
RewriteRule /blog/(.*) %{HTTP_HOST}/blog/newpost.php?$1 [L]

Ваше регулярное выражение начинается с ^blog.... Это никогда не будет соответствовать тому, что вы его отправляете, поскольку начальный / отсутствует. Регулярное выражение, которое вы указали, соответствует URL-адресу, начинающемуся с blog/..., но на самом деле после имени хоста всегда идет косая черта: порт.

Обратитесь к документации для RewriteRule: в частности:

Первоначально шаблон будет сопоставляться с частью URL-адреса после имени хоста и порта, но перед строкой запроса (например, "/app1/index.html").

Мой пример более общий; если вам нужно, чтобы он был для очень определенного пути, как у вас, то непременно верните его и замените (.*) группировка и $1 с тем, что у вас было.