重写 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/terms
是 example.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 重写