Tentando fazer com que URLs amigáveis funcionem

4

Tenho trabalhado para que URLs amigáveis funcionem.

No meu site eu tenho algo assim:

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

Eu gostaria que fosse algo assim:

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

Eu tentei editar o httpd.conf e o .htaccess e não obtenho resposta.

link

<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

Reescrita do alerta LogLevel: trace3

O log de rastreamento diz que é aplicável o padrão, mas ainda vejo:

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/
    
por Donna Delour 25.10.2018 / 20:55

1 resposta

0

Isso provavelmente funcionará:

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

Sua regex começa com ^blog... . Isso nunca corresponderá ao que você está enviando, como o inicial / está faltando. A expressão regular que você diz corresponde a um URL que começa com blog/... , mas, na realidade, há sempre uma barra após o nome do host: port.

Consulte a documentação para RewriteRule : especificamente:

The Pattern will initially be matched against the part of the URL after the hostname and port, and before the query string (e.g. "/app1/index.html").

Meu exemplo é mais genérico; Se você precisar que seja para um caminho muito específico, como você fez, então mude de volta e substitua o (.*) grouping e $1 pelo que você tinha.

    
por 18.11.2018 / 10:07