1

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

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

但是 http://example.com/A123/不会被重写, http://example.com/A123.png也不会被重写。我已经把 mod_rewrite 搞砸了几个小时了,在我的一生中,我无法让它工作......

4

2 回答 2

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 服务器端目录规则。

重新思考逻辑。如果您有某种方法来识别要缩短的 URL,那会容易得多。例如“s”,http ://example.com/s/A123 。

RewriteCond %{REQUEST_URI} ^/s/
RewriteRule ^/s/(.*)$ http://example.com/view.php?id=$1 [QSA]
于 2012-12-17T00:12:21.800 回答
0

我绝对不是这方面的专家,但这与我想要完成的事情相似(请参阅我尚未回答的问题

但是,如果我理解正确,这(未经测试)RewriteRule可能会起作用:

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

神奇的部分是[^\.\/]*: 1 个或多个 ( *) 个字符 ( ) 实例,[]它不是 ( [^ ]) 句点或斜线(\转义这些字符)。

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

于 2012-12-16T02:59:40.490 回答