2014-02-12 4 views
2

мне интересно, если можно достичь этого, приведенного ниже:Apache modrewrite .htaccess - подобная ссылка

Иногда второй атрибут будет подменит

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA] 

Иногда это будет место

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA] 

Но обычно это не работает. Есть ли какой-либо возможный способ достичь этого?

EDIT: Текущее правило переделана:

RewriteEngine on 
ErrorDocument 404 /error 

RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 


RewriteRule ^([\w-]+)/?$ index.php?menu=$1 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2&news=$3 [L,QSA] 
+0

Вы должны опубликовать полный список правил перезаписи. Например, наличие директивы RewriteBase может изменить общее поведение. – freedev

+0

Несомненно, это не сработает. Вам нужно префикс 'news' link как:'/main/n-top' => '/index.php? Menu = main & news = top' – anubhava

+0

Не могли бы вы быть точнее, пожалуйста? – Clem

ответ

2

Выработать на мой комментарий дальше вы можете иметь правила, как это:

ErrorDocument 404 /error 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 

RewriteRule ^([\w-]+)/?$ index.php?menu=$1 [L,QSA] 

RewriteRule ^([\w-]+)/n-([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA] 

RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2&news=$3 [L,QSA] 

Теперь ваши новости ссылки должны, как это: http://domain.com/main-menu/n-sports

+0

Кажется, сейчас это работает. Благодарю. Хотя я не понимаю этого отлично, что это такое «n-» делает :) – Clem

+1

Добро пожаловать. 'n-' существует как префикс в вашей новостной ссылке, так что у вас нет точно такого же совпадающего шаблона. – anubhava

1

Рассмотрите возможность создания регулярного выражения \w, что означает «символ слова», обычно [A-Za-z0-9_]. Обратите внимание на включение подчеркивания и цифр. Это также означает, что это не соответствует ударным символам, например. Конечно, это не соответствует ведущей косой черте, которая начинается с каждого пути в URL-адресах.

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

RewriteRule ^/([\w-]+)/?$ index.php?menu=$1 [L,QSA] 

RewriteRule ^/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&news=$2 [L,QSA] 

# RewriteRule ^/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2 [L,QSA] 

RewriteRule ^/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?menu=$1&submenu=$2&news=$3 [L,QSA] 

Я также отметил, третье правило, поскольку регулярное выражение идентично второму. У вашего подхода также есть логическая проблема, так как нет разницы между этими строками, поэтому нет способа позвонить index.php?menu=$1&submenu=$2

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