查看“配置MW:短链接”的源代码
←
配置MW:短链接
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:MediaWiki]] == 关于 == 短链接,顾名思义,相较于一长串字母的、毫无意义的、复杂的网址,短链接(如:“[http://wiki.eijux.com/首页 http://wiki.eijux.com/首页]”)更易于理解、记忆、管理。 短 URL 或 URL 重写会隐藏页面地址中的 php 文件扩展名。 === 关于:相关 LocalSettings.php 配置项 === 相关配置项: # <span style="color: green">'''$wgScriptPath'''</span>:MediaWiki 文件的实际路径。 # <span style="color: green">'''$wgArticlePath'''</span>:MediaWiki 文章的虚拟路径。 #* 必须与“$wgScriptPath”不同。 # <span style="color: green">$wgUsePathInfo</span>:为操作获取特殊链接。 # <span style="color: green">$wgScriptExtension</span>:脚本扩展名。 # <span style="color: green">'''$wgActionPaths'''</span>:MediaWiki 文章的操作路径。 === 关于:相关 Nginx 指令 === 相关指令: # <span style="color: green">'''try_files'''</span>:尝试读取文件(读取静态文件),按后面的配置一次尝试。 # <span style="color: green">'''$uri'''</span>:Nginx 的一个变量,存放着用户访问的地址。 #: 如:“<code>http://www.xxx.com/index.html</code>”,那么“$uri”就是“<code>/index.html</code>”; # <span style="color: green">'''$uri/'''</span>:Nginx 的一个变量,代表访问的是一个目录。 #: 如:“<code>http://www.xxx.com/hello/test/</code>”,那么“$uri/”就是“<code>/hello/test/</code>”; : '''示例:''' '''<syntaxhighlight lang="xml" inline>try_files $uri $uri/ @rewrite;</syntaxhighlight>''' : '''说明:''' ::# 尝试到网站目录读取用户访问的文件,如果“<code>$uri</code>”存在,就直接返回; ::# 否则继续读取“<code>$uri/</code>”,如果存在直接返回; ::# 否则直接跳转到“<code>@rewrite</code>”(定义的另一个“Location”)。 === 关于:<code>http://wiki.eijux.com/%E9%A6%96%E9%A1%B5</code> === 地址“[http://wiki.eijux.com/%E9%A6%96%E9%A1%B5 http://wiki.eijux.com/%E9%A6%96%E9%A1%B5]”与“[http://wiki.eijux.com/首页 http://wiki.eijux.com/首页]”其实是同一个地址:前者是将地址中的<span style="color: green">中文</span>通过“'''URL 编码'''<ref>URL 编码,工具站点:[https://www.bejson.com/enc/urlencode/ https://www.bejson.com/enc/urlencode/]</ref>”得到的。 == 内容短链接<ref>参考:'''[https://www.mediawiki.org/wiki/Manual:Short_URL Manual:Short_URL]'''</ref> == 默认“内容地址”:<code>[http://wiki.eijux.com/index.php?title=首页 http://wiki.eijux.com/index.php?title=首页]</code>。 MediaWiki 的短链接有两种方案<ref>配置短链接之后,长链接([http://wiki.eijux.com/index.php?title=首页 http://wiki.eijux.com/index.php?title=首页])、短链接([http://wiki.eijux.com/首页 http://wiki.eijux.com/首页])均可正常访问。</ref>: # <span style="color: blue; font-size: 120%">'''example.com/wiki/Page_title'''</span> #: 如:[http://wiki.eijux.com/wiki/首页 http://wiki.eijux.com/wiki/首页] # <span style="color: blue; font-size: 120%">'''example.com/Page_title'''</span> #: 如:[http://wiki.eijux.com/首页 http://wiki.eijux.com/首页] 关于“<span style="color: green">'''example.com/Page_title'''</span>”方案:1、'''使用域的根目录作为 wiki 目录'''<ref>[https://www.mediawiki.org/wiki/Manual:Wiki_in_site_root_directory Manual:Wiki in site root directory]</ref>;2、使用 URL 如“<code>example.com/Page_title</code>”。 但这并不是官方建议的方式: 1、<span style="color: green">仅适用于“'''域名(子域名)仅用于 MediaWiki'''”</span>。 —— 否则,可能会导致与其他文件和目录冲突。 2、可能存在的 Bug,如:[https://phabricator.wikimedia.org/T34621 task T34621]、[https://phabricator.wikimedia.org/T40048 task T40048]。'''等。 === example.com/wiki/Page_title<ref>参考:'''[https://www.mediawiki.org/wiki/Manual:Short_URL/Nginx Manual:Short_URL/Nginx]'''</ref> === ---- 1、MediaWiki 安装在站点目录下的文件夹中(“/www/wwwroot/example.com/'''w'''/”)。 2、文章将以“example.com/'''wiki'''/Page_title”形式的 URL 显示。 配置: # '''LocalSettings.php''': #: <syntaxhighlight lang="PHP" line highlight="1-3"> $wgScriptPath = "/w"; $wgArticlePath = "/wiki/$1"; $wgUsePathInfo = true; </syntaxhighlight> # '''example.com.conf'''<ref name="Nginx_config_of_site">站点的 Nginx 配置:<br/>1、可以通过“宝塔面板”修改(网站 -> 站点设置 -> 配置文件);<br/>2、也可以通过服务器上文件修改(位置:“<span style="color: green">'''/www/server/panel/vhost/nginx/example.com.conf'''</span>”)。</ref><ref name="Nginx_reload">修改 Nginx 配置之后,可能需要'''重载 Nginx 配置''':<br/>1、在宝塔面板的“Nginx 管理”中“重载配置”;<br/>2、通过命令。</ref>: #: <syntaxhighlight lang="XML" line highlight="4-76"> server { # [...] # Location for wiki's entry points location ~ ^/w/(index|load|api|thumb|opensearch_desc|rest|img_auth)\.php$ { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; # or whatever port your PHP-FPM listens on } # Images location /w/images { # Separate location for images/ so .php execution won't apply } location /w/images/deleted { # Deny access to deleted images folder deny all; } # MediaWiki assets (usually images) location ~ ^/w/resources/(assets|lib|src) { try_files $uri 404; add_header Cache-Control "public"; expires 7d; } # Assets, scripts and styles from skins and extensions location ~ ^/w/(skins|extensions)/.+\.(css|js|gif|jpg|jpeg|png|svg|wasm)$ { try_files $uri 404; add_header Cache-Control "public"; expires 7d; } # Favicon location = /favicon.ico { alias /w/images/6/64/Favicon.ico; add_header Cache-Control "public"; expires 7d; } # License and credits files location ~ ^/w/(COPYING|CREDITS)$ { default_type text/plain; } ## Uncomment the following code if you wish to use the installer/updater ## installer/updater #location /w/mw-config/ { # # Do this inside of a location so it can be negated # location ~ \.php$ { # include /etc/nginx/fastcgi_params; # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # fastcgi_pass 127.0.0.1:9000; # or whatever port your PHP-FPM listens on # } #} # Handling for Mediawiki REST API, see [[mw:API:REST_API]] location /w/rest.php/ { try_files $uri $uri/ /w/rest.php?$query_string; } ## Uncomment the following code for handling image authentication ## Also add "deny all;" in the location for /w/images above #location /w/img_auth.php/ { # try_files $uri $uri/ /w/img_auth.php?$query_string; #} # Handling for the article path (pretty URLs) location /wiki/ { rewrite ^/wiki/(?<pagename>.*)$ /w/index.php; } # Allow robots.txt in case you have one location = /robots.txt { } # Explicit access to the root website, redirect to main page (adapt as needed) location = / { return 301 /wiki/Main_Page; } # Every other entry point will be disallowed. # Add specific rules for other entry points/images as needed above this location / { return 404; } } </syntaxhighlight> === example.com/Page_title<ref>参考:'''[https://www.mediawiki.org/wiki/Manual:Short_URL/Page_title_-_nginx,_Root_Access,_PHP_as_a_CGI_module Manual:Short URL/Page title - nginx, Root Access, PHP as a CGI module]'''</ref> === ---- 1、MediaWiki 安装在站点目录的根目录中(“/www/wwwroot/example.com/”)。 2、文章将以“example.com/Page_title”形式的 URL 显示。 配置: # '''LocalSettings.php''': #: <syntaxhighlight lang="PHP" line highlight="1-4"> $wgScriptPath = ""; $wgArticlePath = "/$1"; $wgUsePathInfo = true; $wgScriptExtension = ".php"; </syntaxhighlight> # '''example.com.conf'''<ref name="Nginx_config_of_site"/><ref name="Nginx_reload"/>: #: <syntaxhighlight lang="XML" line highlight="15-21"> server { server_name www.example.com example.com; listen 80; root /home/user/public_html; index index.php index.html index.htm; access_log /var/log/nginx/access-example.log; error_log /var/log/nginx/error-example.log; location ~ \.ht { deny all; } location / { try_files $uri $uri/ @rewrite; } location @rewrite { rewrite ^/(.*)$ /index.php; } location ^~ /maintenance/ { return 403; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; try_files $uri @rewrite; } } </syntaxhighlight> == 操作<ref>“操作”包括:页面的“编辑、移动、删除、保护、历史”等等</ref>短链接<ref>参考:'''[https://www.mediawiki.org/wiki/Manual:$wgActionPaths Manual:$wgActionPaths]'''</ref> == 必须先设置'''[[#内容短链接]]''',并保证有效。 默认“操作地址”:<code>[http://wiki.eijux.com/index.php?title=首页&action=edit http://wiki.eijux.com/index.php?title=首页&action=edit]</code>。 MediaWiki 的“操作短链接”有多种方案: # <span style="color: blue">'''根路径'''</span>: #: <syntaxhighlight lang="PHP" line highlight=""> $actions = array( 'view', 'edit', 'watch', 'unwatch', 'delete','revert', 'rollback', 'protect', 'unprotect', 'markpatrolled', 'render', 'submit', 'history', 'purge', 'info' ); foreach ( $actions as $action ) { #操作前置: $wgActionPaths[$action] = "/$action/$1"; #操作后置: $wgActionPaths[$action] = "/$1/$action"; } $wgActionPaths['view'] = "/$1"; $wgArticlePath = $wgActionPaths['view']; </syntaxhighlight> #: 操作前置:<code>http://wiki.eijux.com'''/edit/首页'''</code>”; #: 操作后置:<code>http://wiki.eijux.com'''/首页/edit'''</code>”; # <span style="color: blue">'''非根路径'''</span>: #: <syntaxhighlight lang="PHP" line highlight=""> $actions = array( 'edit', 'watch', 'unwatch', 'delete','revert', 'rollback', 'protect', 'unprotect', 'markpatrolled', 'render', 'submit', 'history', 'purge', 'info' ); foreach ( $actions as $action ) { #操作前置: $wgActionPaths[$action] = "/wiki/$action/$1"; #操作后置: $wgActionPaths[$action] = "/wiki/$1/$action"; } $wgActionPaths['view'] = "/wiki/$1"; $wgArticlePath = $wgActionPaths['view']; </syntaxhighlight> #: 操作前置:“<code>http://wiki.eijux.com'''/wiki/edit/首页'''</code>”; #: 操作后置:“<code>http://wiki.eijux.com'''/wiki/首页/edit'''</code>”; # <span style="color: blue">'''虚拟路径'''</span>: #: <syntaxhighlight lang="PHP" line highlight=""> $actions = array( 'view', 'edit', 'watch', 'unwatch', 'delete','revert', 'rollback', 'protect', 'unprotect', 'markpatrolled', 'render', 'submit', 'history', 'purge', 'info' ); foreach ( $actions as $action ) { #操作前置: $wgActionPaths[$action] = "$wgScriptPath/action/$action/$1"; #操作后置: $wgActionPaths[$action] = "$wgScriptPath/action/$1/$action"; } $wgActionPaths['view'] = $wgScriptPath/action/$1"; $wgArticlePath = $wgActionPaths['view']; </syntaxhighlight> #: 操作前置:“<code>http://wiki.eijux.com'''/wiki/action/edit/首页'''</code>”; #: 操作后置:“<code>http://wiki.eijux.com'''/wiki/action/首页/edit'''</code>”; * 以上均可分为“<span style="color: blue">'''操作前置'''</span>”和“<span style="color: blue">'''操作后置'''</span>”。 * 以上均设置单独将 view 操作链接中的“view”关键字省略。 <span style="color: red">'''配置了以上内容,仍然需要在“站点的 Ngnix 配置文件中”(example.com.conf)中定义规则以完成 URL 重写。'''</span> 但是,使用“<span style="color: green">'''$wgActionPaths'''</span>”设置后,不能创建某些与“操作关键字”(如上“<code>'''$actions'''</code>”中定义)相关的页面。 如:创建名为“首页/edit”(action后置)、“edit/首页”(action后置)、“首页/history”的页面时,会跳转到“首页”相关的操作页面。 对此,可以修改“<span style="color: green">'''$actions'''</span>”定义的操作词为不常用词(可能需要修改页面代码?)。 == 备注 == 当前站点使用的方式为:[[#example.com/Page_title]]。现备注正在使用的“wiki.eijux.com.conf”如下。 【2022/08/23 05:41:49】: : <syntaxhighlight lang="PHP" highlight=""> server { listen 80; listen 443 ssl http2; server_name wiki.eijux.com; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/wiki.eijux.com; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; ssl_certificate /www/server/panel/vhost/cert/wiki.eijux.com/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/wiki.eijux.com/privkey.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000"; error_page 497 https://$host$request_uri; #SSL-END #ERROR-PAGE-START 错误页配置,可以注释、删除或修改 #error_page 404 /404.html; #error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注释或修改 include enable-php-74.conf; #PHP-INFO-END #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效 include /www/server/panel/vhost/rewrite/wiki.eijux.com.conf; #REWRITE-END #禁止访问的文件或目录 location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } #一键申请SSL证书验证目录相关设置 location ~ ^/.well-known/{ allow all; } #禁止在证书验证目录放入敏感文件 if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) { return 403; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log /dev/null; access_log /dev/null; #允许访问内容, by Eijux at 2022/08/21 23:33:42 try_files $uri @rewrite; } location ~ .*\.(js|css)?$ { expires 12h; error_log /dev/null; access_log /dev/null; #允许访问内容, by Eijux at 2022/08/21 23:33:42 try_files $uri @rewrite; } #修改短链接, by Eijux at 2020/09/09 03:14:50 #begin location ~ \.ht { deny all; } location / { try_files $uri $uri/ @rewrite; } location @rewrite { rewrite ^/(.*)$ /index.php; } location ^~ /maintenance/ { return 403; } location ~ \.php$ { include /www/server/nginx/conf/fastcgi_params; fastcgi_pass unix:/tmp/php-cgi-73.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; try_files $uri @rewrite; } #end access_log /www/wwwlogs/wiki.eijux.com.log; error_log /www/wwwlogs/wiki.eijux.com.error.log; } </syntaxhighlight> === LocalSettings.php设置 === 如下: <syntaxhighlight lang="php" line> # Short URL $wgArticlePath = "/$1"; $wgUsePathInfo = true; $wgScriptExtension = ".php"; </syntaxhighlight> === nginx configuration设置 === 修改站点的nginx配置文件,使用BTPabel安装的LNMP环境,可在面板操作“网站->wiki.eijux.com设置->配置文件”进行设置。<br/> (宝塔中站点的nginx配置文件(如"wiki.eijux.com.conf"),位于"/www/server/panel/vhost/nginx")<br/> 添加: <syntaxhighlight lang="php" line> location / { try_files $uri $uri/ @rewrite; } location @rewrite { rewrite ^/(.*)$ /index.php; } </syntaxhighlight> 就可完成短链接的转换。另: <syntaxhighlight lang="php" line> # 限制访问.ht文件 location ~ \.ht { deny all; } # 限制对maintenance该路径的访问,返回403 location ^~ /maintenance/ { return 403; } # 以下配置允许运行.php的程序 # 关于fastcgi的配置,参见"/www/server/nginx/conf"中的"enable-php-73.conf" # ("fastcgi_params"和"fastcgi.conf"均位于"/www/server/nginx/conf"中) location ~ \.php$ { include /www/server/nginx/conf/fastcgi_params; fastcgi_pass unix:/tmp/php-cgi-73.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; try_files $uri @rewrite; } </syntaxhighlight> == FAQ == === 修改短链接之后,图片页404 === 以上,修改站点短链接之后,网页、特殊页面均无问题,只有png、jpg等图片页访问404(图片列表、svg页无问题)。<br/> 即:站点的nginx配置文件中配置的类型,无法访问: <syntaxhighlight lang="xml" line> location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { ... } location ~ .*\.(js|css)?$ { ... } </syntaxhighlight> 需要在<code>Location</code>中配置<code>try_files</code>。 ==== 修改配置 ==== 如下: <syntaxhighlight lang="xml" line> location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log off; access_log /dev/null; try_files $uri @rewrite; } location ~ .*\.(js|css)?$ { expires 12h; error_log off; access_log /dev/null; try_files $uri @rewrite; } </syntaxhighlight> 备注: 【2020/09/15 00:40:12】Done. == 参考 == <references/>
返回至“
配置MW:短链接
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息