我正在一个网站上工作,其中有许多短 URL,这些短 URL 被重定向到更大版本的 URL。这个想法是短 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。
问候,
阿尼克