2015-07-22 3 views
1

Я пытаюсь написать дружественные usl-сети с помощью Apache Mod-Rewrite.Правило перезаписи не работает должным образом

Мои URL-адреса выглядят примерно так.

index.php?p=edit-profile 
index.php?p=edit-profile&id=3 
index.php?p=edit-profile&id=3&city=sydney 
index.php?p=edit-profile&id=3&city=sydney&name=some example text 

Вот как я попробовал.

RewriteRule ^([\w-]+)/?$ index.php?p=$1 [L,QSA,NC] 
RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?p=$1&id=$2 [L,QSA,NC] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?p=$1&id=$2&city=$3 [L,QSA,NC] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?p=$1&id=$2&city=$3&name=$4 [L,QSA,NC] 

Здесь для меня работают первое, второе и третье правила. Но моя проблема: если у меня есть строка с пробелами для четвертой переменной, мое четвертое правило не работает. А также, если у меня есть одно слово для четвертого, это не сработает.

Может кто-нибудь сказать мне, как я исправить эту проблему. Есть ли способ заменить эти пространства дефисом?

спасибо.

ответ

1

Вы можете включать в себя пространство в классе символов:

RewriteRule ^([\w-]+)/?$ index.php?p=$1 [L,QSA,NC] 
RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?p=$1&id=$2 [L,QSA,NC] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?p=$1&id=$2&city=$3 [L,QSA,NC] 
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\s\w-]+)/?$ index.php?p=$1&id=$2&city=$3&name=$4 [L,QSA,NC] 
+0

Спасибо. Можно ли заменить пространство дефисом? – user3733831

+0

Это можно сделать, но это не очень хорошая идея. Таким образом, ваш php-код получит исходную строку в массиве GET. – anubhava

+0

Понял .. Спасибо за ваше время. – user3733831

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