1

除了 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>

我不希望所有内容都重定向到主页。我有多个子目录也需要重定向: http://www.example.com/sub1http://www.example.com/sub2。我这样做是为了让我的内容可以通过 Ajax 加载。

我以为这只是

RewriteRule ^/(sub1|sub2)/(.*)$ http://www.example.com/$1/ [L]

我把它放在这里的块中:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(sub1|sub2)/(.*)$ http://www.example.com/$1/ [L]
RewriteRule . /index.php [L]
</IfModule>

也许使用 wordpress 你必须使用 wp_rewrite_rule?我想我可以弄乱 .htaccess 文件,让我的规则起作用,然后将它移到函数中。

任何帮助,将不胜感激。

谢谢。

更新:我还尝试将 .htacces 文件设置回 wordpress 默认值...并将此代码添加到我的子主题的 functions.php 文件中:

function AJAX_rewrite_rule() {
add_rewrite_rule(
    '^/(sub1|sub2)/(.*)$',
    'http://www.example.com/$1',
    'top' );
};
add_action( 'init', 'AJAX_rewrite_rule' );

似乎减慢了所有内容的加载速度,但所有未找到的文件仍被重定向到主页,而不是子目录。

更新#2 我认为我走错了方向,因为 add_rewrite_rule 只是向 wordpress 已经到位的结构添加规则。这一切都是通过解释 URL 并将它们更改为由索引运行的数据库查询的变量来实现的。

我很确定我需要使用 $wp_rewrite->non_wp_rules。如果有人有更多想法,请告诉我。

4

1 回答 1

0

试试这个,你似乎有错误的线路:

<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase /
# RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f #Means DONT redirect if file exists.
RewriteCond %{REQUEST_FILENAME} !-d #Means DONT redirect if directory exists.
RewriteCond %{REQUEST_URI} !^/sub1/
RewriteCond %{REQUEST_URI} !^/sub2/
# RewriteRule ^/(sub1|sub2)/(.*)$ http://www.example.com/$1/ [L]
RewriteRule . /index.php [L]
</IfModule>

发生的情况是,每次添加“RewriteRule”时,所有“RewriteCond”都会应用于该规则,然后从空白开始:

RewriteCond A
RewriteCond B
RewriteCond C
RewriteRule Whatever [L] #This applies A, B, and C
RewriteRule Another [L] #This applies no rules

也许这会有所帮助。

此外,如果这不起作用,您可以尝试在“RewriteEngine On”之后立即添加“RewriteRule ^/(sub1|sub2)/(.*)$ http://www.example.com/ $1/ [L]” …</p>

于 2012-11-15T16:10:47.427 回答