.htaccess вопрос - переписывание URL - PullRequest
0 голосов
/ 29 июля 2010

У меня проблема с перезаписью URL в .htaccess.Вот файл .htaccess:

RewriteEngine On
RewriteBase /community/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^view-all-results$ forums/index.php?view=view-all-results [R=302]
RewriteRule ^view-all-results/$ forums/index.php?view=view-all-results [R=302]

Мне нужно переписать URL как "/community/view-all-results?u=2" в "community/forums/index.php?view=view-all-results&u=2".Но согласно приведенному выше правилу я получу «community/forums/index.php?view=view-all-results».

Я пытался изменить RewriteRule на

RewriteRule ^view-all-results?(.*)$ forums/index.php?view=view-all-results&$1 [R=302]

, но он не работает должным образом.Он по-прежнему переписывает URL-адрес на «community/forums/index.php?view=view-all-results».

Когда я изменил правило (поставьте + вместо *):

RewriteRule ^view-all-results?(.+)$ forums/index.php?view=view-all-results&$1 [R=302]

У меня есть URL-адрес типа «community/forums/index.php?view=view-all-results&s».Поэтому я не понимаю этого поведения. ((

Буду очень признателен за любые предложения.

Ответы [ 2 ]

2 голосов
/ 29 июля 2010

Дайте это попробовать ...

RewriteEngine On
RewriteBase /community/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^view-all-results/?$ forums/index.php?view=view-all-results [QSA]

Обычно первая половина RewriteRule не совпадает с QUERY_STRING, поэтому второй пример никогда не будет совпадать с ним. Главное, чего не хватало в вашем первом коде, это флаг QSA, который указывает ему передавать полученный QUERY_STRING вместе с вновь созданным QUERY_STRING. Я также удалил R = 302, так как полагаю, что вы не хотите, чтобы URL-адрес изменился.

Редактировать: О, я также объединил правила, сделав косую черту необязательной.

2 голосов
/ 29 июля 2010

Магический флаг - в документах: [QSA], который добавит оригинальную строку запроса к вашему URL.

Обычное сопоставление выполняется только для пути, а не для запроса, который вы найдете в магической переменной %{QUERY_STRING}). Соответствие этой переменной можно выполнить в условии RewriteCond. Вы также можете добавить эту переменную в результирующий URL, но QSA здесь гораздо более удобен для пользователя.

...