Справка по правилу mod_rewrite для динамического URL

StackOverflow https://stackoverflow.com/questions/907982

  •  05-09-2019
  •  | 
  •  

Вопрос

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

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

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

... на что я хочу здесь обратить внимание:

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

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

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

Это было полезно?

Решение

Для начала ты:

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

Если один учебник по переписыванию не подходит для вас, попробуй другой.

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

Другие советы

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

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]

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

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

это сделало бы свое дело.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top