2013-06-24 4 views
1

Я всегда с помощью следующего:RewriteRule для нескольких имен файлов

RewriteRule ^(.*)/$ page.php?name=category&type=$1 [L] 

переписать мои ссылки. Я использовал только одно имя файла «page.php», и он работал. Сегодня я хочу добавить еще один файл «project.php», и нужен еще один RewriteRule для него, и это полный код, который я пытаюсь использовать в .htaccess:

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L] 

RewriteRule ^(.*)/$ page.php?name=category&type=$1 [L] 
RewriteRule ^(.*)/(.*)/(.*)/(.*)/$ project.php?category=$1&id=$4&type=$2&name=$3 [L] 

Но это работает только для первого пути, а второй - второй. Пожалуйста, может кто-нибудь помочь разобраться? Я пытался найти его некоторое время, но не смог найти решение. Спасибо заранее!

+0

Можем ли мы получить пример URL-адресов? И тот, и другой для page.php. –

+0

Благодарим вас за ответ, Джонатан. Я не могу предоставить прямую ссылку, но когда я попытаюсь получить «категорию» со второй ссылки: project.php? Category = $ 1 & id = $ 4 & type = $ 2 & name = $ 3 (после конвертации ссылки) он дает мне все вместе, включая «id», «type» и т. д., с косой чертой; например один/два/три – dnns

+1

Да, я вижу это. Мне не нужна реальная прямая ссылка, мне просто интересно, как выглядит эта ссылка. Проблема, которую я уже могу вам сказать, состоит в том, что '(. *)' Означает «ноль или более любого символа». Это будет включать '/'. Таким образом, все URL-адреса будут совпадать с '. *', Делая первое правило всегда истинным. После этого переписывается. Вам было бы лучше определить, какой тип символов (только числа, только буквы, и ... и т. Д.) Должны находиться в каждой группе (между скобкой) и сопоставлять именно это. –

ответ

1

Как Джонатан Кун сказал (.*) прочитать все символы так выразиться project.php rule, как первый и использовать по крайней мере ([^/]+) вместо (.*) в этом правиле. ([^/]+) прочитал один или несколько символов, кроме /.