如何使用.htaccess正确重定向多个URL

时间:2015-06-05 00:45:43

标签: apache .htaccess mod-rewrite

这就是我现在在htaccess中所拥有的:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /themelink/mytheme
RewriteRule ^(.+)$  http://portal.example.com/aff.php?aff=$1&p=mytheme.php [R=301,NC]

我有.htaccess位于/themelink/mytheme目录。

这样做会将转到http://example.com/themelink/mytheme/123456的某个人重定向到网址http://portal.example.com/aff.php?aff=123456&p=mytheme.php

这几乎就是我要做的,但它还不是我想要的地方。

我更喜欢将.htaccess放在我的themelink目录中,并让它识别URL中的文件夹名称,而不必为每个主题创建单独的文件夹。

例如,这里有一些我想要工作的链接:

http://example.com/themelink/new-theme/5643434 ---> http://portal.example.com/aff.php?aff=5643434&p=new-theme.php

http://example.com/themelink/bloggertheme/254543 ---> http://portal.example.com/aff.php?aff=254543&p=bloggertheme.php

http://example.com/themelink/test-theme/4353663 ---> http://portal.example.com/aff.php?aff=4353663&p=test-theme.php

我可以通过为每个需要重定向设置的主题创建一个新目录来实现这一点,并且只使用上面的.htaccess,但是我希望有一个单独的.htaccess可以与所有这些一起使用

希望这是有道理的,如果需要澄清,请随时告诉我。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您可以将.htaccess向上移动到/themelink目录,并将其修改为包含两个()捕获组,第一个捕获所有内容到第一个/ {1}}遇到了,第二次捕获了所有内容。

# .htaccess in /themelink
Options +FollowSymlinks
RewriteEngine on
# Change the RewriteBase (it actually isn't even needed)
RewriteBase /themelink
# $1 is the theme name, $2 is the aff value
RewriteRule ^([^/]+)/(.+)$  http://portal.example.com/aff.php?aff=$2&p=$1.php [R=301,NC]

表达式([^/]+)匹配 /的一个或多个字符,并将其捕获为$1

现在,我注意到所有示例中的aff值都是数字。如果是这种情况,我建议将重写更具体地匹配那里的数字,而不是匹配任何东西的(.+)。这样,无效的网址(数字以外的其他网址)将不会重定向,而是可以使用404进行响应。

# Ensure $2 is an integer with `\d+` (one or more digits)
RewriteRule ^([^/]+)/(\d+)$  http://portal.example.com/aff.php?aff=$2&p=$1.php [R=301,NC]