0

我正在一个网站上工作,其中有许多短 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]

因此,任何附带的请求都.htmlindex.php作为标准 CMS 功能提供。但是,现在代码进入重定向循环。如果有人分享一些信息以缓解这个问题,那就太好了。Apache 版本是 2.2,所以我不能在其中使用任何 IF-ELSE。

问候,
阿尼克

4

1 回答 1

0

您应该对从以下位置提供 URL 的规则施加一些限制RewriteMap

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond ${custommap:$0} !^$
RewriteRule ^[^.]+$ ${custommap:$0} [R=301,L,NE]

这将确保只有 URI 中没有 DOT 的非文件和非目录将由custommap.

更重要的是,它还将custommap在重定向之前检查是否存在映射。

确保在测试此更改之前清除浏览器缓存。

于 2017-02-24T10:56:11.240 回答