我已经接管了以前的站点/域,并使用Wordpress建立了一个新站点。如您所料,WP安装会将URL重写为静态URL。
同时,我想保留以前的页面,因为它们具有传入链接。我对301将它们转到“新”页面不感兴趣。
旧的URL结构是/index.php?id=123
,我怀疑是WP .htaccess文件引起问题。供参考,如下所示:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我尝试添加以下内容:
RewriteRule ^([0-9]+).html index.php?id=$1 [R,L]
不起作用 只需重定向到site.com/?id=123
并显示首页。
我应该补充一点,我计划只将这些新页面添加为常规静态HTML文件,格式为123.html,321.html等。
如何使用.htaccess与WP安装配合使用,以及将WP放入.htaccess文件中?
澄清:
我想拥有一个123.html
静态HTML页面index.php?id=123
。当您访问index.php?id=123
它时123.html
,它应该会弹出,但会显示index.php?id=123
在地址栏中。如果您访问123.html
它,则应为301 index.php?id=123
。
要将带有查询字符串的URL映射到实际文件,您需要使用RewriteCond
来匹配查询字符串本身(RewriteRule
并非如此):
遵循这些思路应该做到这一点:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# retrieve X.html when index.php?id=X is requested
RewriteCond %{REQUEST_FILENAME} index\.php
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteCond %1.html -F
RewriteRule .* %1.html? [L]
# standard WordPress routing
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
这将首先检查,如果你有一个请求的index.php与像查询字符串ID = X。
然后它将检查是否确实存在一个名为X.html的文件。对于必须使用更多系统饥饿的子请求文件检查-F而不是标准-f,我不是100%满意的,但是在这种情况下,我无法在.htaccess中找到解决方法。
如果X.html实际存在,它会读取该文件而保留网址为的index.php?ID = X。
但是,如果该文件不存在,它将退回到标准WordPress no file,没有目录路由到index.php
我不是WordPress专家,但是应该可以;我猜主要的WordPress控制器$_SERVER['REQUEST_URI']
用来确定操作。
注意:但是,这不会阻止人们通过访问URL www.site.com/123.html直接访问123.html-我一直陷入无限循环和Apache 500错误,试图防止这种情况:|
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句