友好 URL 与设置

DataLife Engine 在输出新闻时使用友好 URL(人类可读 URL)。这使您可以把文章主题或任何其他文本加入浏览器 URL 中,因此网站在搜索引擎中的索引质量会更高,从而为您的网站带来更多来自搜索引擎的访客。要启用友好 URL,如果您使用 Apache 作为 PHP 的主服务器,则服务器上必须安装 mod_rewrite 模块。如果您的服务器不支持此功能,则可以在脚本设置中将其关闭。

对于 Apache:

如果您使用 Apache 作为 PHP 服务器,那么网站根目录中必须存在以下内容的 .htaccess 文件(该文件随 DLE 发行包提供):

DirectoryIndex index.php

DirectoryIndex index.php

<IfModule mod_rewrite.c>
\tRewriteEngine On

\tRewriteCond %{REQUEST_FILENAME} !-f
\tRewriteRule \.(php|jpg|jpeg|gif|ico|png|svg|webp|avif|js|css|mp3|ogg|mp4|mkv|avi|zip|rar|woff|woff2)(\?|$) - [L,NC,R=404]

\tRewriteRule ^sitemap.xml$ uploads/sitemap.xml [L]
\tRewriteRule ^google_news.xml$ uploads/google_news.xml [L]
\tRewriteRule ^static_pages.xml$ uploads/static_pages.xml [L]
\tRewriteRule ^category_pages.xml$ uploads/category_pages.xml [L]
\tRewriteRule ^tags_pages.xml$ uploads/tags_pages.xml [L]
\tRewriteRule ^news_pages(\d*?).xml$ uploads/news_pages$1.xml [L]

\tRewriteCond %{REQUEST_FILENAME} !-f
\tRewriteCond %{REQUEST_FILENAME} !-d
\tRewriteRule . index.php [L]
</IfModule>

对于 Nginx:

如果您使用 Nginx 作为 PHP 服务器,那么在域名配置的 location 分区中必须存在以下内容:

location / {
 
   location ~ ^/backup/ {
       deny all;
       return 403;
   }
 
   location ~ ^/engine/ {
       deny all;
       return 403;
   }
 
   location ~ ^/public/.*\.ph(p\d*|tml)$ {
       deny all;
       return 403;
   }
 
   location ~ ^/language/ {
       deny all;
       return 403;
   }
 
   location ~ ^/templates/.*\.(ph(p\d*|tml)|tpl)$ {
      deny all;
      return 403;
   }
 
   location ~ ^/uploads/.*\.ph(p\d*|tml)$ {
       deny all;
       return 403;
   }
 
   location ~ ^/uploads/files/.*\.(avi|divx|mp3|ogg|flac|aac|mp4|wmv|m4v|m4a|mov|mkv|webm|m3u8)$ {
       allow all;
   }
 
   location ~ ^/uploads/files/ {
       deny all;
       return 403;
   }
 
   rewrite "^/sitemap.xml$" /uploads/sitemap.xml last;
   rewrite "^/google_news.xml$" /uploads/google_news.xml last;
   rewrite "^/static_pages.xml$" /uploads/static_pages.xml last;
   rewrite "^/category_pages.xml$" /uploads/category_pages.xml last;
   rewrite "^/tags_pages.xml$" /uploads/tags_pages.xml last;
   rewrite "^/news_pages(\d*?).xml$" /uploads/news_pages$1.xml last;
   
# 你的其余域名配置代码
   
   try_files $uri $uri/ /index.php?$args;
}

其中省略号位置应填写您域名运行所需的附加参数、PHP 处理器及其他设置。对于 Nginx 配置,我们建议您联系系统管理员或主机服务支持团队。

自定义链接外观和规则:

您可以在控制面板中的相应分区更改和配置友好 URL 的外观。但对于缺乏经验的用户,我们不建议自行修改链接外观。我们建议直接在脚本设置中选择三种预设外观之一。

如果您决定自己修改链接外观或添加自定义规则,那么需要遵循若干规则。默认情况下,搜索模式使用的语法中,例如 {foo} 表示查找一个命名为 foo 的匹配项,而该匹配本身对应的正则表达式为 [^/]+。也就是说,匹配直到第一个斜杠为止的任意字符集合。若要为所匹配的表达式指定自定义模板,您可以写成例如 {bar:[0-9]+}。下面是几个示例:

/user/{id:\d+}/ 该条件会匹配 /user/42,但不会匹配 /user/xyz

/user/{name}/ 该条件会匹配 /user/foobar/,但不会匹配 /user/foo/bar

/user/{name:.+}/ 该条件会完整匹配 /user/foo/bar。

从搜索模板中提取到的值会赋给相应的名称。在这些示例中,找到的值可以通过 {id}{name} 标签传递到实际链接中。相应地,脚本将接收到 $_GET['id']$_GET['name'] 的值。

友好 URL 搜索模板中的自定义参数不能使用捕获分组,因为它们本身就是分组。例如,{lang:(en|de)} 不能使用,因为 () 是搜索分组。您应改用 {lang:en|de}{lang:(?:en|de)}

注意:如果您修改了标准 DLE 规则,那么在实际友好 URL 中只能传递 DLE 能识别并处理的变量。例如,对于显示完整新闻,DLE 理解的是 /index.php?newsid=123,其中变量 newsid 接收数值。因此无论您如何改变友好 URL 的模板,实际链接中都必须传递带有数值的 newsid 变量。