ПОЛУЧИТЬ параметры строки запроса из .htaccess переписать URL в PHP

#apache #.htaccess #mod-rewrite #url-rewriting #query-string

Вопрос:

На своем веб-сайте я пытаюсь переписать несколько своих URL-адресов, как показано ниже:

Этот URL-адрес

http://example.com/news.php?newstype=newsletteramp;newsid=1123amp;newstitle=my news title

инт к:

http://example.com/newsletter/1123/my news title

Мое правило перезаписи .htaccess выглядит так, как показано ниже:

 RewriteEngine On
Options  FollowSymlinks
RewriteBase /

RewriteRule ^(.*)/(.*)/(.*)/?$ news.php?newstype=$1amp;newsid=$2amp;newstitle=$3 [L,QSA,NC,B]
 

Мой <a> тег выглядит так:

 $seoUrl = "$urlNewsType/$newsid/$urlNewsTitle/";
$seoUrl = urldecode($seoUrl);
$seoUrl = html_escape($seoUrl, 'UTF-8');

<a href="$seoUrl">Read More</a>
 

Все это работает на меня. Но мой вопрос в том, что мне нужно получить эти параметры строки запроса отдельно от URL в PHP. Проблема в том, что я не могу достать эти коляски, как обычно.

В php это результат: echo '<pre>',print_r($_GET).'</pre>';

 Array
(
  [newstype] => news/1114
  [newsid] => Presentation: Heath Day in 2018
  [newstitle] => 
)
 

Может ли кто-нибудь сказать мне, что плохого я сделал в этом отношении?

Ответ №1:

Шаблон регулярного (.*) выражения жаден. Он соответствует полному запрошенному пути. Попробуйте ([^/] ) вместо этого :

 RewriteRule ^([^/] )/([^/] )/([^/] )/?$ news.php?newstype=$1amp;newsid=$2amp;newstitle=$3 [L,QSA,NC,B]