【发布时间】:2025-12-28 03:21:51
【问题描述】:
解决方案:
似乎 htaccess 需要 'B' 才能保留 & 号 所以使用
RewriteRule ^album/([a-zA-Z0-9-=_.]+)$ view.php?album=$1 [L,B]
有效
解决方案
我正在尝试从 url 读取 get 值:
view.php?album=something
这是我在 .htaccess 文件中的规则之一:
#this rewrite 'view.php?album=something' to 'album/something'
RewriteRule ^album/([^/\.]+)/?$ ^view.php?album=$1 [L]
问题在于,有时专辑名称(即'something')可能在名称中包含和&,这会导致$_GET 出错。
**For example**
album name is 'football&basketball'
The view.php page will only read up to football and throw an error.
没有重写规则,它工作得很好,但是使用重写规则,它会在这种情况下搞砸。
我现在正在使用 rawurlencode
如果名称中没有 & ,那么它也可以正常工作 - 只有当它搞砸时才使用 &
有人对如何克服这个问题有任何建议吗?我尝试过使用 htmlspecialchars 和 htmlentities 等。
编辑:添加代码
htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
#rewrite view.php?album=whatever to album/whatever
RewriteRule ^album/([a-zA-Z0-9-=_.]+)$ view.php?album=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteBase /ShyamJoshi/dist/
#remove .php and .html extension
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteOptions Inherit
ReWriteCond %{HTTP:accept-encoding} (gzip.*)
ReWriteCond %{REQUEST_FILENAME} !.+\.gz$
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.+) $1.gz [QSA,L]
</IfModule>
PHP:
这个函数被使用了两次。首先它显示所有目录,然后它显示目录中的所有图像(这是'else'部分)
function getImagesOrImageDirs($dirOnly) {
$dirLoc = getcwd() . '/images/events/';
$allDirs = preg_grep('/^([^.])/', scandir($dirLoc));
echo '<div class="row">';
if ($dirOnly == true) {
foreach($allDirs as $dir) {
$innerDirImages = preg_grep('/^([^.])/', scandir($dirLoc.'/'.$dir));
$firstImageOfDir = reset($innerDirImages);
/* view.php?album=something -> rewritten by htaccess to albums/something*/
$href = 'album/'.$dir;
// $href = 'album/'.$dir;
$imageSrc = 'images/events/'.$dir.'/'.$firstImageOfDir;
echo albumAndPhotoTemplate($href, $imageSrc, true, $dir, 'col-xs-12 col-sm-3');
}
} else {
if (empty ($_GET['album']) ) {
return ;
}
$albumName = $_GET['album'];
print_r($albumName);
$dirLoc = $dirLoc .'/'.$albumName;
$allImages = preg_grep('/^([^.])/', scandir($dirLoc));
foreach($allImages as $image) {
$imgSrcAndHref = 'images/events/'.$albumName.'/'.$image;
echo albumAndPhotoTemplate($imgSrcAndHref, $imgSrcAndHref, false, '', 'col-xs-12, col-sm-3');
}
}
echo '</div>';
}
【问题讨论】: