我接管了以前的网站/域名,并使用Wordpress建立了一个新网站。 WP安装将URL重写为静态URL,正如您所期望的那样。
同时我想保留以前的页面,因为它们有传入的链接。我对将它们变成“新”页面并不感兴趣。
旧的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
并显示首页。
我应该补充一点,我计划将这些新页面添加为123.html,321.html等格式的常规静态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
。
答案 0 :(得分:1)
要将带有查询字符串的网址映射到实际文件,您需要使用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 的文件是否确实存在;我不是100%高兴不得不使用更多系统饥饿的子请求文件检查 -F 而不是标准的 -f 但是我看不到它的方法在这种情况下.htaccess。
如果 X.html 实际存在,它将获取该文件,同时将URL保留为 index.php?id = X 。
但是,如果该文件不存在,它将退回标准WordPress 无文件,无目录路由到 index.php
我不是WordPress专家,但应该有效;我想主要的WordPress控制器使用$_SERVER['REQUEST_URI']
来确定操作。
注意:但是,这不会阻止用户通过访问网址 www.site.com/123直接访问 123.html 。 HTML - 我一直陷入无限循环和Apache 500错误试图阻止:|