Apache переписать условие и отсутствие символов - PullRequest
0 голосов
/ 16 декабря 2009

У нас есть следующее условие / правило mod_rewrite, но оно возвращает ошибку 404 для URL, которые просто начинают «i» (или «css» в этом отношении), если они не соответствуют точно нашим соответствующим каталогам (/ i / css) и др.)

RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt|/(i|css|design_and_docs|js|test)/*)
RewriteRule ^(.*)$ /index.php/$1 [L]

Это лишает меня возможности иметь маршрут / URI (используя CodeIgniter, но я не думаю, что это имеет значение), например / itemid или / idcommand (просто пара, в которой я нуждался на прошлой неделе)

Я могу легко изменить RewriteCond следующим образом, чтобы проверить наличие косой черты, но затем запрос к каталогу / i без косой черты завершится неудачно, тогда как раньше он работал:

RewriteCond $1 !^(index\.php|robots\.txt|/(i|css|design_and_docs|js|test)\//*)

С косой чертой / i / все еще разрешается, и этого может быть достаточно для наших целей. Но я бы очень хотел, чтобы / i все еще разрешал соответствующий каталог / i. Поэтому вместо того, чтобы просто проверять на наличие косой черты в конце, я бы хотел проверить на наличие косой черты, или , отсутствие каких-либо символов.

Как мне это сделать с помощью регулярного выражения?

Ответы [ 2 ]

1 голос
/ 16 декабря 2009

Вместо просто \/ для конечной косой черты создайте подгруппу и проверьте наличие или конец строки, который равен $: (\/|$)

RewriteCond $1 !^(index\.php|robots\.txt|/(i|css|design_and_docs|js|test)(\/|$)/*)
0 голосов
/ 16 декабря 2009

Я не уверен, что / делает то, что вы ожидаете. AFAIK, тебе не нужен ведущий слеш в .htaccess. Вы пробовали это:

RewriteCond $1 !^(index\.php|robots\.txt|i/|css/|design_and_docs/|js/|test/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...