[PHP-WEBMASTER] [web-news] master: Canonicalises feed base URL handling (#41)

[email protected] (NickSdot via GitHub)
Newsgroups php.webmaster
Message-ID <[email protected]>
Author: NickSdot (NickSdot)
Committer: GitHub (web-flow)
Pusher: derickr
Date: 2026-08-10T16:21:05+01:00

Commit: https://github.com/php/web-news/commit/3242085b50b1ce9cdfb2a02fdbb84b82c8a387b2
Raw diff: https://github.com/php/web-news/commit/3242085b50b1ce9cdfb2a02fdbb84b82c8a387b2.diff

Canonicalises feed base URL handling (#41)

* Canonicalise feed base URL handling

* review: standardise to news-web.php.net

Changed paths:
  M  README.md
  M  group.php
  M  index.php
  M  lib/config.php


Diff:

diff --git a/README.md b/README.md
index 70262b3..6ac1429 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ for local development.
 ```
 git clone https://github.com/php/web-news.git
 cd web-news/
-NNTP_HOST=news.php.net php -S localhost:8080 .router.php
+NNTP_HOST=news-web.php.net php -S localhost:8080 .router.php
 ```
 
 -----
diff --git a/group.php b/group.php
index 4884b1c..005941e 100644
--- a/group.php
+++ b/group.php
@@ -29,15 +29,18 @@
     error($e->getMessage());
 }
 
-$host = htmlspecialchars($_SERVER['HTTP_HOST'], ENT_QUOTES, "UTF-8");
+$cleanBaseUrl = clean($NEWS_WEB_BASE_URL);
+$baseUrlParts = parse_url($NEWS_WEB_BASE_URL);
+$cleanBaseHost = clean($baseUrlParts['host'] . (isset($baseUrlParts['port']) ? ':' . $baseUrlParts['port'] : ''));
+$cleanGroupUrl = urlencode($group);
 switch ($format) {
     case 'rss':
         header("Content-type: text/xml");
         echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";?>
 <rss version="2.0">
  <channel> 
-  <title><?php echo $host; ?>: <?php echo $group?></title>
-  <link>http://<?php echo $host; ?>/group.php?group=<?php echo $group?></link>
+  <title><?php echo $cleanBaseHost; ?>: <?php echo $group?></title>
+  <link><?php echo $cleanBaseUrl; ?>/group.php?group=<?php echo $cleanGroupUrl?></link>
   <description></description>
         <?php
         break;
@@ -49,8 +52,8 @@
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns="http://my.netscape.com/rdf/simple/0.9/">
  <channel>
-  <title><?php echo $host; ?>: <?php echo $group?></title>
-  <link>http://<?php echo $host; ?>/group.php?group=<?php echo $group?></link>
+  <title><?php echo $cleanBaseHost; ?>: <?php echo $group?></title>
+  <link><?php echo $cleanBaseUrl; ?>/group.php?group=<?php echo $cleanGroupUrl?></link>
   <description><?php echo $group?> Newsgroup at <?php echo $NNTP_HOST; ?></description>
   <language>en-US</language>
  </channel>
@@ -146,11 +149,13 @@
 foreach ($overview['articles'] as $articleNumber => $details) {
     /*  $date = date("H:i:s M/d/y", strtotime($odate)); */
     $date822 = date("r", strtotime($details['date']));
+    $cleanArticlePath = "/$cleanGroupUrl/" . urlencode((string) $articleNumber);
+    $cleanArticleLink = "$cleanBaseUrl$cleanArticlePath";
 
     switch ($format) {
         case 'rss':
             echo "  <item>\n";
-            echo "   <link>http://$host/$group/$articleNumber</link>\n";
+            echo "   <link>$cleanArticleLink</link>\n";
             echo "   <title>", format_subject($details['subject'], $charset), "</title>\n";
             echo "   <description>",
                 htmlspecialchars(format_author($details['author'], $charset), ENT_QUOTES, "UTF-8"),
@@ -161,7 +166,7 @@
         case 'rdf':
             echo " <item>\n";
             echo "  <title>", format_subject($details['subject'], $charset), "</title>\n";
-            echo "  <link>http://$host/$group/$articleNumber</link>\n";
+            echo "  <link>$cleanArticleLink</link>\n";
             echo "  <description>",
                 htmlspecialchars(format_author($details['author'], $charset), ENT_QUOTES, "UTF-8"),
                 "</description>\n";
diff --git a/index.php b/index.php
index 1c9d1e3..20bd3e2 100644
--- a/index.php
+++ b/index.php
@@ -17,7 +17,7 @@
 
 head();
 
-$DISPLAY_NNTP_HOST = htmlspecialchars(($NNTP_HOST == 'localhost') ? 'news.php.net' : $NNTP_HOST);
+$DISPLAY_NNTP_HOST = htmlspecialchars(($NNTP_HOST == 'localhost') ? 'news-web.php.net' : $NNTP_HOST);
 ?>
 
 <nav class="secondary-nav">
diff --git a/lib/config.php b/lib/config.php
index 71a3835..4a4c523 100644
--- a/lib/config.php
+++ b/lib/config.php
@@ -4,3 +4,10 @@
 if (getenv('NNTP_HOST')) {
     $NNTP_HOST = getenv('NNTP_HOST');
 }
+
+$NEWS_WEB_BASE_URL = 'https://news-web.php.net';
+if (getenv('NEWS_WEB_BASE_URL')) {
+    $NEWS_WEB_BASE_URL = rtrim(getenv('NEWS_WEB_BASE_URL'), '/');
+} elseif (PHP_SAPI == 'cli-server') {
+    $NEWS_WEB_BASE_URL = 'http://' . $_SERVER['HTTP_HOST'];
+}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.