mod_rewrite конвертировать определенные папки в параметры - PullRequest
1 голос
/ 15 января 2010

У меня есть сайт, на котором я хотел бы преобразовать первую подпапку в параметр (из заданного списка подпапок), поэтому

http://localhost/mysite/folder1/dosomething.php

отображается как показано выше, но для PHP это выглядит так:

... localhost / mysite / dosomething.php? Organization = folder1

Мне нужно делать это только для определенных папок (например, не ... localhost / mysite / admin /), и мне нужно учитывать тот факт, что параметры могут быть добавлены или не добавлены в URL *. 1010 *

Я создаю сайт для использования несколькими организациями, и в зависимости от организации, цвета и т. Д. На сайте должны быть разными, но каждая организация будет использовать одни и те же страницы, и клиенту нужен шорткод организации в URL. Я думал, что лучший способ сделать это будет с mod_rewrite.

Я пробовал:

rewriterule ^folder1/(.*) $1&organisation=folder1 [NC]

но это не работает и не обрабатывает тот факт, что к URL-адресу уже могут быть параметры. Кто-нибудь может предложить способ сделать это?

С уважением и благодарностью

На основе ваших отзывов:

Хм, я не могу заставить это работать. В .htaccess у меня есть Опции + FollowSymLinks ПереписатьEngine на RewriteRule ^ folder1 /(.*) $ 1 & organization = folder1 [NC, QSA]

Если я просматриваю ... server / sitename / folder1 / destination.php, я получаю сообщение об ошибке «страница не найдена», а в журнале отладки htaccess говорится:

(3) [perdir / var / www / sitename /] добавить постфикс с информацией о пути: / var / www / sitename / folder1 -> /var/www/sitename/folder1/destination.php (3) [perdir / var / www / sitename /] strip префикс per-dir: /var/www/sitename/folder1/destination.php -> folder1 / destination.php (3) [perdir / var / www / sitename /] применяет шаблон '^ folder1 /(.)' к uri 'folder1 / destination.php' (2) [perdir / var / www / sitename /] переписать 'folder1 / destination.php' -> 'destination.php & organization = folder1' (3) [perdir / var / www / sitename /] добавить префикс per-dir: destination.php & organization = folder1 -> /var/www/sitename/destination.php&organisation=folder1 (2) [perdir / var / www / sitename /] strip префикс document_root: /var/www/sitename/destination.php&organisation=folder1 -> /sitename/destination.php&organisation=folder1 (1) Внутренний редирект [perdir / var / www / sitename /] с /sitename/destination.php&organisation=folder1 [ВНУТРЕННЕГО ПЕРЕНОСА] (3) [perdir / var / www / sitename /] полоса префикса per-dir: /var/www/sitename/destination.php&organisation=folder1 -> destination.php & organization = folder1 (3) [perdir / var / www / sitename /] применяет шаблон '^ folder1 /(.)' к uri 'destination.php & organization = folder1' (1) [perdir / var / www / sitename /] проходит через /var/www/sitename/destination.php&organisation=folder1

Ответы [ 3 ]

0 голосов
/ 15 января 2010

Чтобы добавить параметры в строку запроса (вместо их замены), используйте флаг QSA:

RewriteRule ^folder1/(.*) $1&organisation=folder1 [NC,QSA]

"Этот флаг заставляет механизм перезаписи добавлять часть строки запроса строки подстановки к существующей строке вместо ее замены. Используйте этот параметр, если вы хотите добавить дополнительные данные в строку запроса через правило перезаписи."

См. Документация Apache для mod_rewrite .

0 голосов
/ 04 декабря 2012

Правильные правила будут:

# rewrite for php scripts
RewriteRule ^(folder[0-9]+)(/([^/]*\.php)?)$ .$2?organisation=$1 [NC,QSA]
# rewrite for css and js (assuming they are relative to path of your htaccess)
RewriteRule ^(folder[0-9]+)/(.*) ./$2 [NC,QSA]

Хотя это тоже должно сработать, если вы не против отправить ваш параметр везде:

RewriteRule ^(folder[0-9]+)/(.*) $2?organisation=$1 [NC,QSA]
0 голосов
/ 15 января 2010

Я бы предложил

RewriteRule ^folder1/(.*)?(.*) $1?organisation=folder1&$2 [NC]
RewriteRule ^folder1/(.*) $1?organisation=folder1 [NC]

Я подозреваю, что кто-то, кто немного лучше с RegExs, может объединить их в одно правило,

Также убедитесь, что у вас включен режим перезаписи модов с помощью

RewriteEngine on

выше правил перезаписи в вашем .htaccess

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...