【问题标题】:AJAX rewrite rule for directories目录的 AJAX 重写规则
【发布时间】:2012-11-15 15:53:57
【问题描述】:

我正在尝试编写除 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。如果有人有更多想法,请告诉我。

【问题讨论】:

    标签: ajax wordpress mod-rewrite


    【解决方案1】:

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

    <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]”...

    【讨论】:

    • 如果你在第二个 RewriteCond 之后添加这个(使用我的第一个示例)怎么办: RewriteCond %{REQUEST_URI} !^/sub1/ RewriteCond %{REQUEST_URI} !^/sub2/ (我更新了答案)
    • 从那里,您可以在这些子目录中使用 .htaccess 来根据需要进行重定向
    猜你喜欢
    • 2018-07-06
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2014-07-14
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多