2013-11-07 5 views
1

Скажем, у меня был этот URL:только переписать каталог, если успешно переделал родительский каталог

http://mywebsite.com/forum/thread/129

Я хочу переписать:

http://mywebsite.com/index.php?area=forum&page=thread&threadid=129

Как я могу добиться этого без определения всех возможных сочетание подкаталогов?

Вот что я пробовал:

RewriteRule ^(.*)/(.*)/(.*)$ index.php?area=$1&page=$2&threadid=$3 [NC,L] 

и несколько других попыток, все бесполезно.

Это то, что я закончил с (и работает):

RewriteRule ^forum/?$      index.php?area=forum        [NC,L] 
RewriteRule ^forum/thread/?$    index.php?area=forum&page=thread    [NC,L] 
RewriteRule ^forum/thread/(.*)/?$  index.php?area=forum&page=thread&threadid=$1   [NC,L] 

Как я могу добиться того, что я хочу сделать?

Параметры URL могут быть пустыми. Мой сценарий будет проигнорирован.

ответ

1

Попробуйте это правило:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)(?:/([^/]*)(?:/([^/]*))?)?/?$ /index.php?area=$1&page=$2&threadid=$3 [QSA,L] 

Мысль его не ясно, что вы имеете в виду: Is there some regex that will only try and match the next sub-directory if it matches the first one?

+0

Спасибо, это почти работает! Он 404 находится в каталоге первого уровня, но работает с каждым подкаталогом (в моем примере я мог бы просмотреть конкретный поток). Также он работает только тогда, когда вы включаете обратную косую черту - может ли это быть дополнительным? Я пытался использовать /? без везения. – Jared

+0

Просьба привести примеры каждого случая, когда он не работал. Я могу предложить выход. – anubhava

+0

mysite.com/forum/ не существует. mysite.com/forum/thread/ делает. mysite.com/forum/thread не существует. mysite.com/forum/thread/ (обратите внимание на обратную косую черту). – Jared

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