Регулярное выражение для перезаписи URL - PullRequest
1 голос
/ 26 декабря 2011

Я нашел вопрос, похожий на мою проблему ( Регулярное выражение для запроса URL ), но не смог решить мою проблему.

Поэтому у меня возникли проблемы с регулярными выражениями в HTACCESS.

Итак, что у меня на сайте есть:

ROOT: (мой веб-корень находится в подпапке 'sites')

/sites / index.php и другие файлы

/ sites / sites / sample_folder_name /

Теперь я хотел бы переписать URL-адрес:

/ sites / sites / sample_folder_name / file_name.php

to:

/ sites / file_name.php ? siteredirect = sample_folder_name

Помните: если URL содержит какие-либо параметры запроса, то их также необходимо переписать, например:

Пример:

/ sites / sites / sample_folder_name / file_name.php ? cat_id = 1 & user = 2

to:

/ sites / file_name.php ? cat_id = 1 & user = 2 & siteredirect = sample_folder_name

Параметры должны быть неизвестны вместо user и cat_id.Это могут быть любые параметры.Означает, что все, что написано после .php, также должно входить в URL.

Означает:

/ sites / sites / sample_folder_name / file_name.php ? If_any_parameters

затем:

/ sites / имя_файла.php ? If_any_parameters & siteredirect = sample_folder_name

в противном случае:

/ sites / file_name.php ? Siteredirect = sample_folder_name

В настоящее время перезапись работает отлично, но я не могу заставить их работать с параметрами.

ЧтоУ меня в HTACCESS прямо сейчас:

RewriteRule ^sites\/([0-9A-Za-z_]+)\/([0-9A-Za-z_]+)\.php(.*)$ $2.php(?(?=$3)$3&)siteredirect=$1 [L]
RewriteRule ^sites\/([0-9A-Za-z_]+)\/$ index.php?siteredirect=$1 [L]

После этого он дает мне 404.

Пожалуйста, помогите ... Где я делаю это неправильно!

1 Ответ

0 голосов
/ 26 декабря 2011

Вам необходим флаг QSA (Query String Append):

RewriteRule ^sites(/sites/[^/]+)/([^/]+)$ $1?siteredirect=$2 [QSA]

Более того, измените свои правила: вам не придется использовать L

Также рассмотрите возможность использования директив <Location>, это облегчит вашу работу:

<Location "/site/site">
    #rules here
</Location>

<LocationMatch "^/site/(?!site/)">
    #rules here
</Location>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...