【发布时间】:2012-03-21 14:28:03
【问题描述】:
在htaccess中,你如何301重定向动态页面?
例如,如果我想要一个让 /get.php?i=1234 重定向到 /i/1234 等的规则怎么办?
【问题讨论】:
标签: php .htaccess dynamic redirect http-status-code-301
在htaccess中,你如何301重定向动态页面?
例如,如果我想要一个让 /get.php?i=1234 重定向到 /i/1234 等的规则怎么办?
【问题讨论】:
标签: php .htaccess dynamic redirect http-status-code-301
您可以像在此代码中一样使用 mod_rewrite 重定向:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^(i)=([^&]+)(&|$) [NC]
RewriteRule ^get\.php$ %1/%2? [L,R=301,NC]
【讨论】:
试试RedirectMatch directive 和regular expression。这取决于mod_alias,因此它可能始终处于启用状态。你也可以使用 mod_rewrite ,但这可能有点过头了。替换可能包含 $n 形式的引用:
RedirectMatch 301 ^/get\.php\?i=([0-9]+)$ /i/$1
如您所想,$1 是对括号 #1 内匹配内容的引用。你可以有很多参考:
RedirectMatch 301 ^/get\.php\?i=([0-9]+)&y=([0-9]+)$ /i/$1/$2/
您可以使用在线regular expression tester 来详细说明您的 apache 配置:如果我将 ^/get\.php\?i=([0-9]+)&y=([0-9]+)$ 放入“Regexp”输入中,并将 /get.php?i=12&y=24 放入“主题字符串”输入中,然后单击“显示匹配”它显示:
Match at position 0:
/get.php?i=12&y=24
12 # first reference available
24 # second reference available
如果您的正则表达式在测试器中不起作用,它们就不可能在 apache 配置中起作用。您应该先在测试仪中试用它们。
【讨论】: