我有这样的网址:
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错误:
编辑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%肯定。感谢
答案 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
样式文件)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。只有在您无法控制主机配置(读取:非常便宜的托管服务提供商)或者您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)的情况下,它们才被支持作为最后一个选项。 )。