URL查询前强制使用斜杠

时间:2019-02-25 19:35:20

标签: .htaccess url-rewriting

我知道这是一个涉及很多的主题,所以我只想确保每个人都知道:我已经在这里阅读并尝试过许多重写建议,但是没有运气。


我有一个运行良好的WordPress安装(nginx服务器,带apache的虚拟机),但是URL中的目录+查询存在问题。如果该目录在查询之前没有结尾的斜杠,则它不会解析(弹回博客索引)。

示例:

www.example.com/blog /?= generic_query 效果很好。

www.example.com/blog?=generic_query 没有。

不幸的是,我已安装的主题(X-Theme)具有一些管理菜单,这些菜单指向的页面在查询之前在目录中没有结尾斜杠。

我试图重写htaccess中的条件,但是我没有取得任何成功。我读过其他人的文章说,PHP通常根本不关心此事,因此这一奇怪的nginx安装引起了大惊小怪的事实让我想知道这是否是服务器问题。

有人针对这个非常具体的问题有任何建议吗?如果这样的话,将不胜感激!

谢谢

-

编辑:将我的htaccess根文件放在这里。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

# END WordPress

1 个答案:

答案 0 :(得分:2)

将此内容放入.htaccess文件中:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,7}\s/(.*?)([^\/])\?(.*)\sHTTP.*$
RewriteRule  ^(.*)$    /%1%2/?%3   [L]  

第二个石灰将检查请求是否在/之前没有?

第三行会将其添加到内部请求中。

更新:

保存您以前的规则并放入:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{THE_REQUEST} /blog(/)?\?(.*)\sHTTP.*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blog/index.php [L]
</IfModule>

# END WordPress