我想从URL中删除带连字符的随机数,然后使用.htaccess文件重定向到其余URL
例如,我有以下网址,我想从中删除“ 16-”
https://example.com/pics/16-Apple_8xx.jpg
预期的URL并重定向到:
https://example.com/pics/Apple_8xx.jpg
[请帮助我摆脱这个问题。抱歉,没有.htaccess文件的经验。
提前感谢!
听起来很简单:
RewriteEngine on
RewriteRule ^/?pics/[\d]+-(.+)$ /pics/$1 [R=301]
最好先从302临时重定向开始,然后在确定一切设置正确后,再将其更改为301永久重定向。这样可以防止在尝试时缓存问题...
此实现将在http服务器主机配置或分布式配置文件(“ .htaccess”文件)中同样起作用。显然,重写模块需要加载到http服务器内部并在http主机中启用。如果使用分布式配置文件,则需要注意在主机配置中完全启用了它的解释功能,并且该解释文件位于主机的DOCUMENT_ROOT
文件夹中。
和一般说明:您应该始终喜欢将此类规则放置在http服务器主机配置中,而不是使用分布式配置文件(“ .htaccess”)。这些分布式配置文件增加了复杂性,通常是导致意外行为,难以调试的原因,并且确实降低了http服务器的速度。仅当您无法访问真正的http服务器主机配置(阅读:真正便宜的服务提供商)或坚持编写自己的规则的应用程序(这显然是安全的噩梦)时,才提供它们作为最后的选择。
更新:
在对这个问题的评论中,您所写的路径不同于您在问题中所写的路径。在评论中,我解释了规则将不适用的情况。因此,您需要使模式和目标与实际需求匹配:
RewriteEngine on
RewriteRule ^/?redirect/pics/[\d]+-(.+)$ /redirect/pics/$1 [R=301]
或者您可以try实施更灵活的规则。但是,这往往是令人惊讶的副作用的原因,您要等到很久以后才能发现。所以这是有问题的:
RewriteEngine on
RewriteCond %{REQUEST_URI} /pics/[\d]+-(.+)$
RewriteRule ^/?(.*pics)/[\d]+-(.+)$ /$1/%1 [R=301]
经过研究并了解.htaccess配置我在本地和活动域都得到了全球答案。
现在,我的.htaccess文件仅包含以下代码行。
RewriteEngine on
RedirectMatch 301 [\d]+-(.+)$ http://localhost/redirect/pics/$1
对于实时域:
RewriteEngine on
RedirectMatch 301 [\d]+-(.+)$ http://example.com/pics/$1
非常感谢您@arkascha。