我尝试了很多方法,但没有成功的结果。
目标 wiki 访问网址:www.example.com/wiki/Ampersand_%26_nextampersand_%26_plus_%2B_nextplus_%2B_text
Apache 在内部将 %26 和 %2B 处理为 & 和 + 所以我们需要再次将其转换为 url 样式。(如此处提到的 www.mediawiki.org/wiki/Manual_talk:Short_URL/Ampersand_solution#Another_solution)
以下示例仅处理 & 或 + 的 1 次出现,未合并。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wiki/(.*)\&(.*)$ w/index.php?title=$1\%26$2
RewriteRule ^wiki/(.*)\+(.*)$ w/index.php?title=$1\%2B$2
RewriteRule ^wiki/(.*)$ /w/index.php?title=$1 [PT,L,QSA]
RewriteRule ^/?wiki/*$ /w/index.php [L,QSA]
RewriteRule ^/*$ /w/index.php [L,QSA]
问题是如何将所有 & 和 + 符号替换为 %26 和 %2B 并最终转发到处理 index.php。
我尝试过类似的方法
RewriteRule ^([^+]*)\+(.*) $1%2B$2 [N] #freezes
RewriteRule ^wiki/([^+]*)\+(.*) wiki/$1%2B$2 [N] #freezes
和许多其他人(组合)从以下建议,但我找不到有效的解决方案。
Apache Mod Rewrite - 替换:用另一个字符
肯定有一个解决方案,因为维基百科正在使用一些成功的方法来做到这一点。
http://en.wikipedia.org/wiki/%26_Yet_%26_Yet
http://en.wikipedia.org/wiki/C%2B%2B
有任何想法吗?谢谢你。