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

MOD_REWRITE для перезаписи GET запросов

Мне нужно выражение .htaccess, чтобы использовать вторую переменную get или получить переменную get по имени. В настоящее время мой mod_rewrite изменяет URL-адрес, чтобы удалить имя файла index.php и изменить переменную GET pageName, чтобы она выглядела просто как имя файла.

Теперь мне нужна вторая переменная GET, но в настоящее время она даже не распознает переменные get после первой перезаписи, поэтому я хотел бы, чтобы mod_rewrite обрабатывал вторую переменную, которая будет 'blogpage = 1' (1 будет страницу блога, на которой вы сейчас находитесь), чтобы она выглядела так:

*********.co.uk/PageName/2

вместо этого

*********.co.uk/PageName?blogpage=2

Поскольку в настоящее время это не работает, сценарий PHP просто считает, что переменная отсутствует, и возвращает значение NULL.

Это мои текущие условия mod_rewrite:

RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^/\.]+)/?$ index.php?pageName=$1

Apache заменит всю строку запроса, если в правиле перезаписи указана новая. Чтобы добавить вместо этого, используйте Флаг QSA, как отмечено в документация по mod_rewrite:

Изменение строки запроса

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

Итак, если вы измените свой код на

RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^/\.]+)/?$ index.php?pageName=$1 [QSA]

он также должен пересылать старую строку запроса.


Чтобы выполнить вторую перезапись, просто добавьте другое правило с другой группой захвата.

RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^/\.]+)/([0-9]+)$ index.php?pageName=$1&blogpage=$2 [QSA,L]

RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^/\.]+)/?$        index.php?pageName=$1 [QSA]