2016-04-08 5 views
0

У меня есть URL-адрес, который иногда имеет один или несколько параметров, и я хочу, чтобы иметь возможность переписать соответственно.Переписать URL с несколькими параметрами

URL, являются следующие:

/index.php?pagetitle=Home 

мне удалось получить этот URL, чтобы увидеть, как я хочу, используя следующее:

/Home 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^([0-9a-zA-Z]+) index.php?pagetitle=$1 [NC,L] 

Я также хотел бы иметь один и тот же URL-адрес, но со статьей ID

.com/index.php?pagetitle=Home&articleid=20 

, который я хотел бы показать, как это:

.com/Home/20 

Но я не могу понять, как заставить его работать на более чем одного параметра.

UPDATE: Ok, так что я смог получить ниже, чтобы работать с помощью: index.php PAGETITLE = $ 1 & ArticleID = $ 2

который отображает как: .com/Главная/20

Я попытался сделать это еще дальше и иметь возможность использовать заголовок статьи, а также правило, которое я пробовал, следующим образом.

RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9a-zA-Z]+))(?:/([0-9]*))?/?$ index.php?pagetitle=$1&articletitle=$2&articleid=$3 [NC,L,QSA] 

Так будет отображаться как: .com/Главная/ArticleTitle/20

Но не хочет работать для меня какая-либо одна знаю, что я делаю неправильно и еще раз спасибо заранее.

http://karpium.co.uk/Home/Baits/20 - Это Url Работает

http://karpium.co.uk/Home - Но этот URL не работает, где, как это делает, когда просто используя PAGETITLE = и ArticleID =

+0

я трахнуть мою голову вокруг этого симпатичного URL-адрес Apache маршрутизации, но потом я понял, что это проще сделать в PHP. Попробуйте SLIM PHP «он имеет легкую спокойную маршрутизацию и очень высокую производительность и больше возможностей, чем Apache.conf files – peter

+0

Спасибо, что основная причина для попытки сделать это в htaccess - это потому, что это проект колледжа, и мы должны создать сайт как можно меньше скриптов, но я буду искать будущие проекты. спасибо – Scorpion

ответ

-1

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

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9]*))?/?$ index.php?pagetitle=$1&articleid=$2 [NC,L,QSA] 
+0

Не могли бы вы добавить какое-то объяснение на этот ответ? –

0

Хорошо, похоже, я исправил его, используя 3 разных правила перезаписи, которые следующие:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^([0-9a-zA-Z]+)$ index.php?pagetitle=$1 [NC,L,QSA] 
RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9a-zA-Z]+))?/?$ index.php?pagetitle=$1&articletitle=$2 [NC,L,QSA] 
RewriteRule ^([0-9a-zA-Z]+)(?:/([0-9a-zA-Z]+))(?:/([0-9]*))?/?$ index.php?pagetitle=$1&articletitle=$2&articleid=$3 [NC,L,QSA] 

Если кто-то может пролить некоторый свет на несколько частей регулярного выражения для меня, это будет очень полезно:

Что означают следующие слова:

?:/

? /?

Еще раз спасибо за помощь :)

+0

**?: ** используется для групп без захвата. ** (?:/(foo)) ** захватывает ** foo ** и сохраняет захваченное значение как ** $ 1 ** без **?: ** группа захвата ** (/ (foo)) ** захватывает **/foo **. и ** /? ** означает, что **/** является необязательным. Вы должны прочитать о регулярном выражении. Есть много сайтов и учебных пособий availabe. Поиск в Google. – starkeen

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