htaccess缩短了URL

时间:2017-09-26 21:52:06

标签: php apache .htaccess mod-rewrite

我有这样的网址:

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

当用户检索视频时,我希望他们获取此网址http://www.example.com/challenge/Video/150/filename.mp4

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

编辑2)

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

enter image description here

编辑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%肯定。感谢

1 个答案:

答案 0 :(得分:2)

这个可能就是你要找的东西:

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

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

上述内部重写规则可以在http服务器主机配置中使用,也可以在动态配置文件(“.htaccess”样式文件)中使用。

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