是什么导致查询字符串被拆分出来的原因
导致/news/50
在第二次运行中被追加(作为下一个标志N
的效果)。
我所追求的行为是将/about/news/50/
重写为/about/news/news-item?post_id=50
。
我添加N
标志,因为我想将重写的uri /about/news/news-item?post_id=50
发送到index.php。
我的.htaccess文件中有以下规则:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule %{REQUEST_FILENAME} !-f
RewriteRule %{REQUEST_FILENAME} !-d
RewriteRule ^about/news/(\d+)/$ /about/news/news-item?post_id=$1 [QSA,N]
RewriteRule ^index\.php$ - [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [QSA,L]
</IfModule>
日志条目:
(2) init rewrite engine with requested uri /about/news/50/
(1) pass through /about/news/50/
(3) add path info postfix: /wordpress/about -> /wordpress/about/news/50/
(3) strip per-dir prefix: /wordpress/about/news/50/ -> about/news/50/
(3) applying pattern '%{REQUEST_FILENAME}' to uri 'about/news/50/'
(3) add path info postfix: /wordpress/about -> /wordpress/about/news/50/
(3) strip per-dir prefix: /wordpress/about/news/50/ -> about/news/50/
(3) applying pattern '%{REQUEST_FILENAME}' to uri 'about/news/50/'
(3) add path info postfix: /wordpress/about -> /wordpress/about/news/50/
(3) strip per-dir prefix: /wordpress/about/news/50/ -> about/news/50/
(3) applying pattern '^about/news/(\d+)/$' to uri 'about/news/50/'
(2) rewrite 'about/news/50/' -> '/about/news/news-item?post_id=50'
(3) split uri=/about/news/news-item?post_id=50 -> uri=/about/news/news-item, args=post_id=50
(3) add path info postfix: /about/news/news-item -> /about/news/news-item/news/50/
(3) applying pattern '%{REQUEST_FILENAME}' to uri '/about/news/news-item/news/50/'
(3) add path info postfix: /about/news/news-item -> /about/news/news-item/news/50/
(3) applying pattern '%{REQUEST_FILENAME}' to uri '/about/news/news-item/news/50/'
(3) add path info postfix: /about/news/news-item -> /about/news/news-item/news/50/
(3) applying pattern '^about/news/(\d+)/$' to uri '/about/news/news-item/news/50/'
(3) add path info postfix: /about/news/news-item -> /about/news/news-item/news/50/
(3) applying pattern '^index\.php$' to uri '/about/news/news-item/news/50/'
(3) add path info postfix: /about/news/news-item -> /about/news/news-item/news/50/
(3) applying pattern '.' to uri '/about/news/news-item/news/50/'
(4) RewriteCond: input='/about/news/news-item' pattern='!-f' => matched
(4) RewriteCond: input='/about/news/news-item' pattern='!-d' => matched
(2) rewrite '/about/news/news-item/news/50/' -> '/index.php'
(2) trying to replace prefix /wordpress/ with /
(1) internal redirect with /index.php [INTERNAL REDIRECT]
(2) init rewrite engine with requested uri /index.php
(1) pass through /index.php
(3) strip per-dir prefix: /wordpress/index.php -> index.php
(3) applying pattern '%{REQUEST_FILENAME}' to uri 'index.php'
(3) strip per-dir prefix: /wordpress/index.php -> index.php
(3) applying pattern '%{REQUEST_FILENAME}' to uri 'index.php'
(3) strip per-dir prefix: /wordpress/index.php -> index.php
(3) applying pattern '^about/news/(\d+)/$' to uri 'index.php'
(3) strip per-dir prefix: /wordpress/index.php -> index.php
(3) applying pattern '^index\.php$' to uri 'index.php'
(1) pass through /wordpress/index.php
答案 0 :(得分:2)
如果您重写了从其中删除了PATH_INFO且不希望重新添加的URL,请尝试使用DPI(丢弃PATH_INFO标志)。这是每个目录重写的问题
编辑:如果你这样做,因为wordpress计数PATH_INFO,你必须实际重写到/index.php/about/news / ...让下一轮仍然看到PATH_INFO。
RewriteRule ^ about / news /(\ d +)/ $ /index.php/about/news/news-item?post_id=$1 [DPI,L] 而不是
RewriteRule ^ about / news /(\ d +)/ $ index.php [DPI,L]