2

我尝试了很多方法,但没有成功的结果。

目标 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 - 替换:用另一个字符

mod_rewrite:用破折号替换下划线

肯定有一个解决方案,因为维基百科正在使用一些成功的方法来做到这一点。

http://en.wikipedia.org/wiki/%26_Yet_%26_Yet

http://en.wikipedia.org/wiki/C%2B%2B

有任何想法吗?谢谢你。

4

1 回答 1

0

看来我需要一些休息时间和新的搜索,所以我终于可以回答我自己的问题了。

解决方案隐藏在这里:

http://www.mediawiki.org/wiki/Manual:Short_URL/Allowing_for_escaped_characters_in_URI

RewriteEngine on
RewriteBase /

RewriteRule ^wiki$ wiki/Main_Page [R,NC]
RewriteRule ^wiki/$ wiki/Main_Page [R,NC]

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /wiki/([^?\ ]+)
RewriteRule ^wiki/(.+)$ /w/index.php?title=%1 [NE,L,QSA] 
于 2012-07-27T23:33:05.690 回答