在linux服务器上使用.htaccess时出现问题

pw9qyyiw  于 2022-11-16  发布在  Linux
关注(0)|答案(1)|浏览(104)

所以我有一个网站,曾经有一个维基结构在php
现在我有一个完全干净的网站,现在从头开始(所以没有隐藏的.htaccess文件等或其他安装的组件),但需要重定向传入的url请求,为旧网站到一个新的html结构
我想我可以用一个.htaccess文件
我在.htaccess文件中尝试了一种语法变体,例如:

<IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RedirectPermanent 3dprintfo.com/doku.php?id=3dproject2 http://3dprintfo.com/3dproject2.html
<IfModule mod_rewrite.c/>
<IfModule>

例如:

RedirectPermanent 301 3dprintfo.com/doku.php?id=3dproject2 http://3dprintfo.com/3dproject2.html

RedirectPermanent http://3dprintfo.com/doku.php?id=3dproject2 http://3dprintfo.com/3dproject2.html

然而,没有什么工作,我不断得到:
错误:您所请求的网址(URL)未找到
此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。
我已经尝试了使用和不使用http/301等。
任何人都可以尝试给我一个例子,多个网址重定向,我可以尝试实现使用我上面的网址名称...

ej83mcc0

ej83mcc01#

就我对你的问题的理解而言,这是一个工作重定向的例子:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?3dprintfo\.com$
RewriteCond %{QUERY_STRING} ^id=3dproject2$
RewriteRule ^/?doku\.php$ /3dproject2.html [R=301,QSD,L]

当然,也可以实现更通用的规则,这样就不需要为每个“旧页面”都建立一个规则目录,但这显然取决于之前使用的链接结构。
一般来说,我建议你应该在实际的http服务器的主机配置中实现这样的规则,而不是在分布式配置文件(“.htaccess”)中。
可能不需要第一个RewriteCond,这取决于您的http服务器中配置的其他内容。
最新消息:
对于你在第一个评论中提出的问题,我建议你这样做:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?3dprintfo\.com$
RewriteCond %{QUERY_STRING} ^id=([^&]+)(?:&|$)
RewriteCond %{DOCUMENT_ROOT}/%1.html -f
RewriteRule ^/?doku\.php$ /%1.html [R=301,QSD,L]

此变体在重写之前还检查文件名(例如3dproject2.html)是否实际存在。

相关问题