【问题标题】:htaccess shorten URLhtaccess 缩短网址
【发布时间】:2017-09-26 21:52:05
【问题描述】:

我有一个这样的网址:

http://www.example.com/folder1/assets/Video/150/filename.mp4

我正在尝试像这样缩短它

http://www.example.com/challenge/Video/150/filename.mp4

我当前的.htaccess 实现是这样的:

RewriteEngine on
RewriteRule ^/challenge/Video$ /folder1/assets/Video [L]

但它不起作用,任何帮助都会有所帮助,我已经尝试过我见过的其他变体,但显然,我做错了。

编辑 1)

为了帮助提供更多信息:用户将视频上传到服务器,然后用户就可以从服务器查看/观看用户提交的视频。当用户提交视频时,网址为:

http://www.example.com/folder1/assets/Video/150/filename.mp4

当用户检索视频时,我希望他们得到这个 URL http://www.example.com/challenge/Video/150/filename.mp4

隐藏实际的文件路径/目录。

编辑 2)

我刚刚从@arkascha 建议的更改结果中添加了一张图片,在修复了 PHP 错误之后,当我将 [END] 更改为 [L] 时,我得到了这个,当我使用 [END] 时,我得到一个500 错误:

编辑 3) 这是我的完整 HTACCESS 代码:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com
RewriteCond /var/www/example.com/%1 -d
RewriteCond %{ENV:REDIRECT_STATUS}  =""
RewriteRule ^(.*)$ /%1/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

RewriteRule ^/?challenge/Video/(\d+)/(.+)$ 
\/WebServices/assets/Video/$1/$2 [L]

当我删除上面的所有内容并只留下您给我的重写代码时,它可以工作,但是,我确定我可能需要其中一些。因此,如果有人可以帮助我了解是哪一行导致它变得有趣。我认为是:

RewriteRule ^(.*)$ index.php?/$1 [L]

但我不是 100% 确定。谢谢

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    可能就是你要找的东西:

    RewriteEngine on
    RewriteRule ^/?challenge/Video/(\d+)/(.+)$ /folder1/assets/Video/$1/$2 [END]
    

    如果您使用该规则遇到“内部服务器错误”(http 状态 500),则可能是您运行的是非常旧版本的 apache http 服务器。在这种情况下,尝试将 [END] 标志替换为 [L] 标志。您的 http 服务器错误日志文件将具有特定于该问题的内容。

    上述内部重写规则适用于 http 服务器主机配置,同样适用于动态配置文件(“.htaccess”样式文件)。

    对此的一般提示:您应该始终喜欢将此类规则放在 http 服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess 样式文件)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置(阅读:非常便宜的托管服务提供商)或您有一个依赖于编写自己的重写规则的应用程序(这显然是安全噩梦)的情况下作为最后一个选项被支持)。

    【讨论】:

    • 好吧,我只是把你的重写规则代替了我的代码,我确实收到了 http 状态 500 错误,我正在考虑更新我的 apache(目前使用 Godaddy VPS)所以这是一项调查它自己的。非常感谢您的帮助并花时间帮助我。更新服务器后,我将再次尝试您的实现,看看会发生什么。
    • 当我将 [END] 更改为 [L] 时,我得到了以下信息:消息:引用应仅返回变量引用 消息:无法修改标头信息 - 标头已由(输出开始于 /home/示例/public_html/system/core/Exceptions.php:170)
    • 这是您实现的基于 PHP 的逻辑的问题,与发生重写的 apaches 协议层无关。看起来 PHP 代码(可能是您使用的某些框架)要么很旧,要么没有得到很好的照顾。至少从 PHP 5.0 版开始,PHP 就发出了这个警告......
    • 这表明您的错误可视化必须重新配置:当前错误消息显示在输出中,这几乎没有意义,并且不适用于生产代码。错误消息属于您的 http 服务器错误日志文件,您在 Web 环境中使用 PHP 时需要对其进行监控。所以你需要相应地改变你的 PHP 配置。
    • 看起来像是该组规则中重写规则的顺序问题。它们从上到下进行处理。由于如果物理文件系统中不存在所请求的对象,则中间一个通过index.php 脚本路由所有请求,因此您希望将此自定义重写规则放置在该通用重新路由规则上方的视频中.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2021-11-10
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多