【问题标题】:Guidance on URL rewrite and constructionURL重写和构建指南
【发布时间】:2011-11-07 05:05:35
【问题描述】:

我即将尝试编写照片共享脚本和将数字转换为描述性名称的脚本/重写。我对如何执行此操作有一个模糊的想法,所以我正在寻找一些通用的 cmets/指导。

问题 1:我需要一个存储在我的根目录上方的照片的 URL 源。我计划将照片名称(存储在我的数据库中)作为查询字符串附加到我的 url,例如:www.mywebsite.com/getphoto.php?12_3.jpg,然后编写一个 php 脚本 (getphoto.php)取“?”之后的部分并从根上方获取那张照片。

这有意义吗?有什么需要考虑的吗?

问题 2:我想将 URL 末尾的数字转换为描述性名称(即输入 facebook.com/4 会显示 facebook.com/zuck)。我不确定执行此操作的最佳方法,并希望获得一些指导以朝着正确的方向前进。

谢谢!

【问题讨论】:

    标签: php apache url mod-rewrite


    【解决方案1】:

    对于问题 1:简单的重写可以处理,您需要使用 [QSA] 标志。像这样的:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ^.*\.(jpeg|jpg|gif|png|bmp)$
    RewriteRule ^(.+)$ /getphoto.php?photo=$1 [L,QSA]
    

    这将在后台将 url http://mywebsite.com/12_3.jpg 重写为 http://mywebsite.com/getphoto.php?photo=12_3.jpg 请注意,第三个重写条件希望 URI 以图像扩展名结尾,您可能不需要它。

    对于问题 2,这取决于“4”之类的内容如何映射到“zuck”。如果你要将它们硬编码到你的 apache 配置中,你可以使用 RewriteCond:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/4$
    RewriteRule ^.*$ /zuck [L]
    RewriteCond %{REQUEST_URI} ^/5$
    RewriteRule ^.*$ /mark [L]
    

    等等。 (或将[L] 替换为[R,L] 以重定向而不是重写,或者只使用Redirect

    Redirect /4 /zuck
    Redirect /5 /mark
    

    等等

    如果映射存储在数据库中,您将需要动态执行此操作,可能作为 php 脚本执行重定向,使用类似于问题 1 的内容。重写规则将重写为 /redirect.php?id=$1 和您的 redirect.php 脚本将采用 id 并进行数据库查找以查看重定向浏览器的位置。

    【讨论】:

    • 感谢林乔恩的建议。对于问题 2,我的映射将存储在数据库中,所以我想我将利用重写规则将 id 发送到脚本,然后从那里重定向浏览器。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多