我正在一个网站上工作,我有很多短网址,这些网址被重定向到更大版本的网址。这个想法是短URL是脱机分发的,用户通常会在浏览器地址栏中记住它们并输入类型。例如:
http://www.example.com/abc应重定向到http://www.example.com/higher_education/companion/politics/abc.html
还有一些外部链接。比如:http://www.example.com/google会将用户重定向到https://www.google.com
编辑 -
还有另一种方案,http://www.example.com/elementary/def.html将重定向到http://www.example.com/elementary/xyz.html
但是,我们现在希望使用RewriteMap
实现此目的。我们为此编写的代码如下:
<IfModule rewrite_module>
RewriteEngine on
RewriteMap custommap txt:/var/www/vhosts/example.com/httpdocs/map.txt
#RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule "^(.*)$" "${custommap:$0}" [R,L,NC]
</IfModule>
map.txt
包含:
abc http://www.example.com/higher_education/companion/politics/abc.html
google https://www.google.com
问题是.htaccss文件还包含一些RewriteRule。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)\.html$ /index.php?sid=$1&ssid=$2 [L,NC,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /index.php?sid=$1 [L,NC,QSA]
因此.html
附带的任何请求都将由index.php
作为标准CMS功能提供。但是,现在代码进入重定向循环。
如果有人为了缓解这个问题而分享一些亮点,那就太好了。 Apache版本是2.2,所以我不能使用任何IF-ELSE。
的问候,
Aneek
答案 0 :(得分:0)
您应该对来自RewriteMap
的
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond ${custommap:$0} !^$
RewriteRule ^[^.]+$ ${custommap:$0} [R=301,L,NE]
这将确保custommap
只处理URI中没有DOT的非文件和非目录。
更重要的是它还会在重定向之前检查custommap
中是否存在映射。
确保在测试此更改之前清除浏览器缓存。