0
我曾经为一家公司工作,该公司曾经为需要注册才能使用的文章模糊URL。因此,他们将不得不像使用mod重写的无法混淆网址
/story.php?story_id=Z_ZXYZ
其中有一些代码,映射字母与数字制定出真实的故事ID
所以
Z = 0
Y = 1
X = 2
等
我们现在正在移动技术堆栈,并已决定不需要混淆的URL。所以,我在看是否有可能于未使用国防部重写
到目前为止,我有
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
等。
,但它不到风度似乎工作,即使我把一些文字的重写规则作为这样RewriteRule ^.*$ /story/${decryptmap:ZXY} [L,R=301]
我得到像/story/?story_id=Z_ZAD
一个网址有什么明显的,我做错了什么?我可以看到两个条件正在匹配,但地图似乎不起作用。
我应该甚至试图让mod重写来做到这一点?我可以重定向到一个很容易做到这一点的脚本,但是这会将代码重定向到两个我不喜欢的地方。
(我不担心?story_id = Z_ZAD,我知道如何摆脱的那个)
或者,他可以利用脚本,将刚才得到的地图,用正确的URL配对,如果mod_rewrite的是行不通的。 – dusoft 2009-10-29 16:40:26
@dusoft:是的,绝对。事实上,重写映射类型'txt'使用线性搜索,因此O(n)。但十个项目不是问题。对于大量的项目,类型'dbm'是一个更好的选择,因为它是通过哈希映射(O(1))实现的。 – Gumbo 2009-10-29 16:48:13
我得到这个工作,在每个阶段使用301重定向我认为我的其他一些规则打破了它。 – 2009-11-04 14:45:40