2013-06-20 4 views
1

У меня есть этот Apache RewriteRule, настроенный ниже, в котором есть проблема, что он позволяет использовать следующий URL-адрес, не возвращая ошибку HTTP 404.ограничить Apache RewriteRule одной прямой косой чертой для URL-адреса

http://www.crmpicco.lan/golf/glasgow/play/explore/features/explore/course-features/ayrshire/parkland/

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

RewriteRule ^golf/([^.]+)/([^.]+)/([^.]+)/$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L] 

Когда я выливать на PHP $_REQUEST суперглобальном, это дает мне эти значения:

[url] => golf/ 
[city] => glasgow/play/explore/features/explore/course-features 
[golf_region] => ayrshire 
[golf_category] => parkland 

В частности, city. То, что я хочу сделать, это разрешить только одну строку между прямыми слэшами.

Можно ли настроить RewriteRule для этого?

Я использую Apache 2.2.3.

ответ

1

сделайте снимок.

RewriteRule ^golf/([^\/]+)/([^\/]+)/([^.]+)/$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L] 
1

Проблема использования этого регулярного выражения:

([^.]+) 

Это означает совпадения текста 1 или более символов до тех пор, точка/период будет найден. Вы должны использовать:

([^/]+) 

Это означает, что текст соответствует 1 или более символам, пока не будет найдена косая черта.

Измененного правило будет:

RewriteRule ^golf/([^/]+)/([^/]+)/([^/]+)/?$ /golf/?city=$1&golf_region=$2&golf_category=$3 [QSA,L,NC] 
+0

Великого ответ, спасибо - любое большого спасибо за объяснение! – crmpicco

+0

Добро пожаловать, рад, что проблема может быть решена. – anubhava

Смежные вопросы