Дружественный URL для принятия дополнительных параметров «традиционным способом» (PHP _GET) - PullRequest
1 голос
/ 01 марта 2012

Я разрабатываю веб-приложение на PHP и использую mod_rewrite от Apache для "дружественных" URL.

У меня есть дружественные URL, такие как:

mysite.com/article/112
mysite.com/article/145
mysite.com/article/40

Все в порядке, но яхочу иметь возможность получать дополнительные параметры, подобные этому

mysite.com/article/112?referer=google

На самом деле, если я перехожу на mysite.com/article/112?referer=google, я вижу свою страницу, но у меня нет "реферера"param в $ _GET.

Как мне решить эту проблему?;)

Править Решено: D

Я забыл упомянуть, что мое старое правило было:

Rewriterule ^article/([0-9]+)$ index.php?page=article&article_id=$1

, а новый:

Rewriterule ^article/([0-9]+)$ index.php?page=article&article_id=$1 [QSA]

Ответы [ 4 ]

5 голосов
/ 01 марта 2012

добавить модификатор [QSA] к правилу перезаписи

означает Query String Append - именно то, что вы хотите.

0 голосов
/ 01 марта 2012

вы можете использовать это с .htaccess

RewriteRule ^article/([0-9]+)/(.*)$ somefile.php?id=$1 [L]
0 голосов
/ 01 марта 2012

По данным apache.org

По умолчанию строка запроса пропускается без изменений.Однако вы можете создавать URL-адреса в строке подстановки, содержащей часть строки запроса.Просто используйте знак вопроса внутри строки замещения, чтобы указать, что следующий текст должен быть повторно введен в строку запроса.Если вы хотите стереть существующую строку запроса, завершите строку подстановки только знаком вопроса.Чтобы объединить новые и старые строки запроса, используйте флаг [QSA].

0 голосов
/ 01 марта 2012

Вот mod_rewrite, который я использую для этого:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*[^/])/?$
RewriteCond %{DOCUMENT_ROOT}%1.php -f
RewriteRule .+ %1.php [QSA,L]

Вставьте файл .htaccess или в область конфигурации сервера вашего веб-сайта.

...