我查看了将动态网址重定向到静态网址的所有不同解决方案,但我找不到与我的问题相关的任何案例。
我想知道.htaccess
的正确301重定向规则应该是什么其他信息:
以下是我想将OLD动态网址重定向到各自的静态网址的情况。
旧网址= http://example.com/desarrollo/mantenedores/art_indice.asp?art_id=61
新网址= http://example.com/comunidad/articles/2/tipos-de-sociedades
...谢谢
答案 0 :(得分:1)
请尝试填写重写地图文件(请参阅here)以与网址目标进行对应。
创建一个mapfile,您可以在其中放置所需的所有类别:
RewriteMap mapoldtonew \
dbm:/web/htdocs/yoursite/rewriterules/mapoldtonew.map
关于您的示例,您的地图文件可能会填充以下内容:
art_id=61 articles/2/tipos-de-sociedades
...
然后在这里你去寻找困难的部分:
RewriteCond %{REQUEST_URI} desarrollo/(.*)
RewriteCond %{QUERY_STRING} (([^=]+)=([0-9]+))
# The following rule doesn't touch the URL, but
# will try to search into the map file and
# create an OLDTONEW environment variable with the string found
# and if not found, assign OLDTONEW to "notfound"
RewriteRule . - [QSA,E=OLDTONEW:${mapoldtonew:%1|notfound}]
# if the OLDTONEW is not empty and is not found:
RewriteCond %{ENV:OLDTONEW} notfound
# this should never happen => 404:
RewriteRule . - [R=404,L]
# Reach here means :
# - OLDTONEW is empty
# - OLDTONEW is was found
# => if OLDTONEW is not empty:
RewriteCond %{ENV:OLDTONEW} !^$
# make the redirection to the corresponding found:
RewriteRule . /%{ENV:CATEGORYREVERSE} [QSA,L]
这应该有效。
如果它没有尝试在第一个 RewriteRule指令中将%1
更改为%2
。
如果它仍然没有,你可能有足够的线索来完成这项工作。
如果你没有足够的线索......
请尝试使用RewriteLog
指令:它可以帮助您找出此类问题:
# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
我最喜欢检查regexp的工具:
http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)