。htaccess:从网址中删除随机数和连字符

问题描述 投票:0回答:2

我想从URL中删除带连字符的随机数,然后使用.htaccess文件重定向到其余URL

例如,我有以下网址,我想从中删除“ 16-”

https://example.com/pics/16-Apple_8xx.jpg

预期的URL并重定向到:

https://example.com/pics/Apple_8xx.jpg

[请帮助我摆脱这个问题。抱歉,没有.htaccess文件的经验。

提前感谢!

.htaccess url redirect
2个回答
0
投票

听起来很简单:

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]

0
投票

经过研究并了解.htaccess配置我在本地和活动域都得到了全球答案。

现在,我的.htaccess文件仅包含以下代码行。

RewriteEngine on
RedirectMatch 301 [\d]+-(.+)$ http://localhost/redirect/pics/$1

对于实时域:

RewriteEngine on
RedirectMatch 301 [\d]+-(.+)$ http://example.com/pics/$1

非常感谢您@arkascha。

© www.soinside.com 2019 - 2024. All rights reserved.