.htaccess重写-filename.html更改为/?c = filename

时间:2018-11-13 15:06:17

标签: apache .htaccess url mod-rewrite hyperlink

我需要它来处理所有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]

1 个答案:

答案 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=查询字符串吗?