我需要它来处理所有html URL(索引除外),我尝试使用.htaccess
时没有运气。
例如...将此链接从http://www.example.com/signup.html
更改为http://www.example.com/?c=signup
。
如果我直接输入http://www.example.com/?c=signup
,它也必须镜像http://www.example.com/signup.html
。
编辑 我找到了解决方法,除了直接输入.html文件的情况外,在这种情况下,它不会重写。
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{QUERY_STRING} ^c=([^&]+) [NC]
RewriteRule ^/?$ %1.html [NC,L,QSA]
答案 0 :(得分:1)
RewriteRule ^/?$ %1.html [NC,L,QSA]
要从signup.html
到/?c=signup
进行重定向(大概是“重定向”,而不是“重写”),则可以在现有重写之前执行以下操作:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ([^.]+)\.html$ /?c=$1 [R,L]
当您的现有指令重写为REDIRECT_STATUS
文件时,对.html
环境变量进行检查的条件可以防止重定向循环。
请注意,这是一个临时(302)重定向。如果这是永久性的,请将R
更改为R=301
,但是只有在确认它可以正常工作后,才能将其更改。
总结一下,您可以对现有的指令进行整理:
Options +FollowSymLinks -MultiViews
RewriteEngine On
# Redirect from signup.html to /?c=signup
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ([^.]+)\.html$ /?c=$1 [R,L]
# Rewrite from /?c=signup to signup.html
RewriteCond %{QUERY_STRING} ^c=([^&]+)
RewriteRule ^/?$ %1.html [QSD,L]
大概是您要从重写的替代中丢弃c=
查询字符串吗?