Un обфусцировать URL, используя переписать мод - PullRequest
0 голосов
/ 29 октября 2009

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

/ story.php? Story_id = Z_ZXYZ

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

так

Z = 0 
Y = 1
X = 2 

и т.д.

Сейчас мы перемещаем стек технологий и решили, что запутанные URL-адреса не нужны. Поэтому я смотрю на то, можно ли обфусцировать URL-адреса с помощью mod rewrite

Пока у меня есть

  RewriteCond %{REQUEST_URI} ^.*story.php [NC]
  RewriteCond %{QUERY_STRING} ^.*story_id=Z_([ZXYWVUTSRQ]*) [NC]
  RewriteRule ^.*$ /story/${decryptmap:%1} [L,R=301]

У меня есть карта перезаписи в файле httpd.conf

<IfModule mod_rewrite.c>
  RewriteMap decryptmap txt:decyrpsdstxt
</IfModule>

Который имеет содержание

##
## decrypt urls
##
Z 0
X 1

и т.д .. * * 1023

но, похоже, он не работает, даже если я добавлю какой-то текст в Rewriterule, так что RewriteRule ^.*$ /story/${decryptmap:ZXY} [L,R=301] Я получаю URL вроде /story/?story_id=Z_ZAD

Есть ли что-то очевидное, что я делаю не так? Я вижу, что эти два условия совпадают, но карта, похоже, не работает.

Должен ли я даже пытаться заставить мод переписать это? Я мог бы перенаправить на скрипт, который сделал это довольно легко, но это поместило бы код перенаправления в два места, которые мне не нравились.

(меня не волнует? Story_id = Z_ZAD, я знаю, как от этого избавиться)

1 Ответ

1 голос
/ 29 октября 2009

Карта перезаписи будет работать со всей переданной строкой. Так что в вашем случае вам нужно будет передавать только один символ за раз:

# put story_id at the begin for efficiency
RewriteCond %{QUERY_STRING} ^(([^&]*&)+)(story_id=Z_[^&]*)&*(.*)$
RewriteRule ^story\.php$ story.php?%3&%1%4

# decrypt story_id value character by character
RewriteCond %{QUERY_STRING} ^story_id=Z_([^ZXYWVUTSRQ]*)([ZXYWVUTSRQ])(.*)
RewriteRule ^story\.php$ story.php?story_id=Z_%1${decryptmap:%2}%3 [N]

# redirect
RewriteCond %{QUERY_STRING} ^story_id=Z_([^&])&*(.*)
RewriteRule ^story\.php$ /story/%1?%2 [L,R=301]
...