Как мне заставить mod_rewrite подавлять обработку большего количества правил? - PullRequest
4 голосов
/ 13 ноября 2008

Учитывая мой текущий файл .htaccess, как бы я изменил его, чтобы проверить наличие дополнительного URL-пути, например '/ src / pub / ', и переписать его в '/ ', не влияя на текущую перезапись?

Вот оригинальный файл .htaccess:

RewriteEngine on

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

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

и вот моя недавняя попытка (которая не работает):

RewriteEngine on

RewriteRule ^/src/pub/(.*)$ /$1 [R]

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

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

Редактировать: Вот несколько примеров того, чего я хочу достичь:

Новое дополнительное правило:

From:  http://www.mysite.com/src/pub/validfile.php
To:    http://www.mysite.com/validfile.php

From:  http://www.mysite.com/src/pub/user/detail/testuser
To:    http://www.mysite.com/user/detail/testuser

Существующее правило (уже работает):

From:  http://www.mysite.com/user/detail/testuser
To:    http://www.mysite.com/index.php?route=user/detail/testuser

Ответы [ 2 ]

5 голосов
/ 13 ноября 2008

Я предполагаю, что проблема в том, что URL переписывается по первому правилу, а затем переписывается вторым.

Решением этой проблемы является добавление флага "последний" к первому правилу, например так:

RewriteRule ^/src/pub/(.*)$ /$1 [R,L]
3 голосов
/ 13 ноября 2008

в файле .htaccess, используйте вместо этого:

RewriteRule ^src/pub/(.*)$ /$1 [R]

ведущий "/" не будет совпадать в .htaccess, только в пределах httpd.conf ( src - внизу страницы), если вы хотите остановить обработку дальнейших правил, затем добавьте флаг L:

RewriteRule ^src/pub/(.*)$ /$1 [L,R]

переписать сравнение журнала (контекст .htaccess):

// using ^/src/pub/(.*)$ - leading slash will not work in .htaccess context!
(1) pass through /home/test/src

// using ^src/pub/(.*)$
(2) rewrite 'src/pub/testme' -> '/testme'
(2) explicitly forcing redirect with http://test/testme
(1) escaping http://test/testme for redirect
(1) redirect to http://test/testme [REDIRECT/302]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...