1

我有一个非常简单的网站,它有一些静态页面,还有一些使用重写规则来提取数据的动态页面。例如:

RewriteRule ^phone-directory/([^/\.]+).htm$ number.php?for=$1 [L]

因此,任何像这样的网址:phone-directory/ google.htm 总是会在查询字符串上使用google加载number.php 。

我已经为 CMS 功能安装了 WordPress,但我仍然需要我的目录同时工作。我还希望目录使用 WordPress 主题,以便在站点范围内更改样式!

所以我在我的 WP 主题目录中设置了一个自定义模板,并在 word press 中设置了一个名为“company-listing”的“页面”。然后我将以下规则添加到我的 htaccess 文件的顶部:

RewriteRule ^phone-directory/([^/\.]+).htm$ index.php?p=23 [L]

p=23 指的是我的自定义页面“公司列表”的位置

该重写规则有效,并将我带到“公司列表”,但这就是问题所在,URL 重写为 domain.com/company-listing

我不希望它那样做。我认为我的重写规则被触发,然后当 index.php?p=23 被击中时,默认的 WordPress 重写规则触发器。我已经尝试了以下排除方法来阻止这种情况的发生,而不会感到高兴:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/(phone-directory/.*)$
RewriteCond %{REQUEST_URI} !^/(index.php?p=23)$
RewriteCond %{REQUEST_URI} !^/(company-listing/.*)$
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

有没有办法解决这个问题?要在 WordPress 中使用自定义模板并重写为我选择的 url?总之:

我想:

domain.com/phone-directory/google.htm

装载:

domain.com/index.php?p=23(这是 wordpress 中的“页面”)

4

1 回答 1

1

你只需要在你的 wordpress 规则之前有你的规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^phone-directory/([^/\.]+).htm$ number.php?for=$1 [L]
RewriteRule ^phone-directory/google.htm$ index.php?p=23 [L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

如果前面的规则之一匹配,只要number.php存在,!-fwordpress 的路由规则的条件就会失败。

于 2013-09-16T12:53:46.607 回答