Помогите с правилом mod_rewrite для динамического URL - PullRequest
1 голос
/ 26 мая 2009

Тьфу ... mod_rewrite заставляет меня чувствовать себя глупо. Я просто еще не обнял его. : /

У меня есть этот URL:

http://example.com/a/name/

... что я хочу указать здесь:

http://example.com/a/index.php?id=name

... где name - это то, что передается index.php в качестве аргумента id.

Все, что я пробовал, приводит к 404 или 500 ..: (

Ответы [ 4 ]

2 голосов
/ 26 мая 2009

Если вы хотите, чтобы завершающий слеш был необязательным, вы должны исключить файл, для которого вы переписываете запрос. В противном случае у вас будет хорошая бесконечная рекурсия.

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/a/index\.php$
RewriteRule ^/a/([^/]+)/?$ /a/index.php?id=$1 [L]

Здесь любой запрос, начинающийся с /a/…, но не /a/index.php, переписывается в /a/index.php.

Но если косая черта обязательна, исключать файл назначения не нужно:

RewriteEngine on
RewriteRule ^/a/([^/]+)/$ /a/index.php?id=$1 [L]
1 голос
/ 26 мая 2009

Может быть, что-то вроде

RewriteEngine on RewriteBase /a/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/?$ index.php?id=$1 [L,QSA]

сделает свое дело.

1 голос
/ 26 мая 2009

Предлагаю вам взглянуть на этот URL:

http://www.dracos.co.uk/code/apache-rewrite-problem/

Представленные решения будут работать, но в URL есть некоторые пояснения, в основном касающиеся? и # в самих URL.

1 голос
/ 26 мая 2009

Для начала:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule ^/?a/([^/]+)/?$ /a/index.php?id=$1 [QSA,L]

Если один урок по перезаписи вам не подходит, попробуйте другой .

Редактировать: исключено index.php согласно предложению Гамбо

...