Как изменить параметр запроса mod_write в path для произвольно длинного пути? - PullRequest
0 голосов
/ 27 мая 2019

Я создаю простой API с apache и хочу сопоставить /really/long/path/api/captions.php?caption_id=blah с /really/long/path/api/captions/blah. Важно НЕ указывать полный путь в правиле перезаписи, потому что я хочу, чтобы это работало независимо от того, где я разверну этот код. Тем не менее, я не могу найти / выяснить рабочий пример .htaccess правил перезаписи, которые позволяют мне сопоставлять только на основании последней части расширения.

Итак, если предположить, что у меня есть, скажем, captions.php в директории с именем api, какой .htaccess файл мне нужно включить в api, чтобы выполнить это преобразование, не имея /really/long/path/ где-нибудь там?

(я также хочу иметь возможность сопоставить /really/long/path/api/captions.php с /really/long/path/api/captions/ и /really/long/path/api/captions.)

Я пробовал всевозможные подстановочные символы синтаксиса; Вот одна из тех нерабочих попыток:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)/?captions/(.*?)/?$ /captions.php?caption_id=$1 [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /captions\.php\?caption_id=([^\&\ ]+)
RewriteRule ^(.*?)/?captions\.php$ /captions/%1? [L,R=301]

Спасибо!

1 Ответ

0 голосов
/ 30 мая 2019

Получил в конце.Это все, что нужно было:

RewriteEngine On # Turn on the rewriting engine
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^captions/?$ captions.php [NC,L]
RewriteRule ^captions/(.*)/?$ captions.php?caption_id=$1 [NC,L]
...