Справка по правилу mod_rewrite для динамического URL
-
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-адресах.