2012-12-16 179 views
1

我正在尝试为我的一个项目制作网址缩短功能;如果用户使用不包含任何斜线(对于目录)或文件扩展名的URL访问站点,我想要执行的操作应该重定向到将提供正确文件的PHP脚本。例如:使用mod_rewrite缩短网址

http://example.com/A123将被改写为http://example.com/view.php?id=A123

http://example.com/A123/不被改写,并 http://example.com/A123.png不会被任何重写。我一直在搞mod_rewrite几个小时现在和我的生活我无法得到这个工作...

回答

0

我绝对没有大师在这,但它类似于我想要完成的(see my yet unanswered question

不过,如果我理解正确的话,这个(未经测试)RewriteRule可能工作:

RewriteRule ^([^\.\/]*)$ view.php?id=$1 [L] 

魔术部分是[^\.\/]*它说:1或人物造型更(*)实例([])这不是([^ ])一段时间或斜线(\转义这些字符)。

就像我说的,我没有测试过,我也不是专家,但也许这会有所帮助。

2

无法识别需要缩短的URI,您需要排除所有其他可能性。这可能会要求您创建一个冗长的排除列表。以下是一个起点。这些条件中的每一个都验证请求URI不匹配(用!表示)。如果它不符合所有条件,则运行规则。

RewriteCond %{REQUEST_URI} !^/view.php 
RewriteCond %{REQUEST_URI} !.html$ 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule ^/(.*)$ http://example.com/view.php?id=$1 [QSA] 

上面也需要你(你要求),打破了标准的做法的规则,这是处理目录请求没有尾随斜线。您可能会遇到其他问题,因为上述规则会破坏您的Apache服务器端目录规则。

反思逻辑。如果您有某种方法可以识别要缩短的网址,则会更容易。例如's',http://example.com/s/A123

RewriteCond %{REQUEST_URI} ^/s/ 
RewriteRule ^/s/(.*)$ http://example.com/view.php?id=$1 [QSA]