Как переписать ВСЕ URL при пропуске определенных папок? - PullRequest
0 голосов
/ 27 мая 2009

Я пытаюсь переписать мои URL-адреса, чтобы перейти к одному файлу php:

RewriteRule ^dir/(?:(?!style|js).)*$ http://www.domain.com/single.php?uri=$1 [QSA]

Однако исключение / dir / js и / dir / style не работает, как я надеялся, будет ...

  • [перенаправляет] domain.com/dir
  • [перенаправляет] domain.com/dir/jason
  • [перенаправляет] domain.com/dir/jason/pete
  • [НЕ НАПРАВЛЯЕТ: ХОРОШО] domain.com/dir/js
  • [НЕ НАПРАВЛЯЕТ: ХОРОШО] domain.com/dir/js/*
  • [НЕ НАПРАВЛЯЕТ: ПЛОХОЙ] domain.com/dir/json

Как я могу изменить регулярное выражение в соответствии со своими потребностями?

Ответы [ 3 ]

2 голосов
/ 27 мая 2009

Попробуйте заменить style|js на style\b|js\b.

Может быть RewriteCond может быть полезным, как в

RewriteCond %{REQUEST_URI} !^/dir/(style|js)($|/)
RewriteRule ^/dir/(.*)$ http://www.domain.com/single.php?uri=$1 [QSA]
0 голосов
/ 03 августа 2009

Либо с вашим отрицательным прогнозным утверждением:

RewriteRule ^dir/(?!(?:style|js)(?:/|$))(.*) http://www.example.com/single.php?uri=$1 [QSA]

Но это не так приятно.

Или вы просто добавляете еще один тест на запуск $1:

RewriteCond $1 !^(style|js)(/|$)
RewriteRule ^dir/(.*) http://www.example.com/single.php?uri=$1 [QSA]
0 голосов
/ 27 мая 2009

РЕДАКТИРОВАНИЕ:

domain.com / dir / json не перенаправляет, потому что не соответствует регулярному выражению.

Причина, по которой / dir / json не перенаправляет, заключается в том, что js следует за dir /, и ваше регулярное выражение совпадает только тогда, когда за dir / не следует или стиль или js. Я думаю, что негативные взгляды - неправильный подход. Я думаю, что вы на самом деле хотите что-то вроде:

RewriteCond %{REQUEST_URI} !^/dir/(js|style)(/.*)?$
RewriteRule ^dir/(.*)$ http://www.domain.com/single.php?uri=$1 [LQSA]

Это в основном означает, что если URL не оканчивается на / js или / style (опционально с дополнительными компонентами пути под этими каталогами), затем применяет правило перенаправления.

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