重写 url 以在组合 django/wordpress 设置中删除一个目录级别

Posted

技术标签:

【中文标题】重写 url 以在组合 django/wordpress 设置中删除一个目录级别【英文标题】:Rewriting urls to cut out one directory level in combined django/wordpress setup 【发布时间】:2014-12-21 07:25:44 【问题描述】:

我有一个从 django 和 wordpress 为同一站点/域提供服务的网络服务器。因此,有使用 mod_wsgi 提供的 python/django 页面和使用 mod_php 提供的 php/wordpress 页面。这一切都已设置好并且工作正常。

精简的(对于这个问题,我删除了到静态文件/文件夹和日志配置的映射)虚拟主机配置如下所示:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName www.example.com
    ServerAlias example.com

    # root directory mapped to djangos wsgi file
    WSGIScriptAlias / /opt/examplecom/example.wsgi

    <Directory /opt/examplecom>
        Order allow,deny
        Allow from all
    </Directory>

    # a subdirectory mapped to wordpress installation folder
    Alias /wp/ /var/www/examplewp/
    <Location "/var/www/examplewp/">
            Options -Indexes
    </Location>
</VirtualHost>

这服务于 django 中的所有内容,除了从 /wp/ 子目录请求的所有内容。例如。 www.example.com/about/ 来自 django,example.com/wp/terms 来自 wordpress。

现在,我想要做的是重写所有指向/wp/ 子目录中某些内容的 url,所以它们看起来像是在根目录中。例如。 example.com/wp/terms 应改写为example.com/terms

据我了解,这件事有一些特长:

    最简单的事情,使用别名Alias / /var/www/examplewp/是不行的,因为根目录已经映射到wsgi-script了。

    Wordpress 自己重写。 example.com/wp/termsexample.com/wp/index.php?p=33 的重写。 Wordpress 重写配置存储在其安装文件夹中的 .htaccess 文件中。

我尝试过这样的事情:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName www.example.com
    ServerAlias example.com

    RewriteEngin On
    RewriteRule ^/wp/terms$ /terms

    # root directory mapped to djangos wsgi file
    WSGIScriptAlias / /opt/examplecom/example.wsgi

    <Directory /opt/examplecom>
        Order allow,deny
        Allow from all
    </Directory>

    # a subdirectory mapped to wordpress installation folder
    Alias /wp/ /var/www/examplewp/
    <Location "/var/www/examplewp/">
            Options -Indexes
    </Location>
</VirtualHost>

但这并没有做任何事情。而且我不知道从哪里开始测试有什么问题。

【问题讨论】:

【参考方案1】:
RewriteEngin On
RewriteRule ^/wp/terms$ /terms  [L]

坦率地说,这是行不通的,因为 ^/wp/terms$ 转换为 /terms 并由 mod_wsgi 提供服务。

【讨论】:

以上是关于重写 url 以在组合 django/wordpress 设置中删除一个目录级别的主要内容,如果未能解决你的问题,请参考以下文章

防止创建的在产品 URL 中包含类别 URL 键的自动 URL 重写

使用多个查询字符串重写 IIS URL

.htaccess 重写以在末尾强制使用斜杠

Python:重写一个循环的 numpy 数学函数以在 GPU 上运行

重写规则以在 HTTP 和 HTTPS 上工作

重写 iOS 应用程序以在 iOS 和 Mac 上运行——如何组织控制器代码?