温馨提示:本文翻译自stackoverflow.com,查看原文请点击:php - How to clean url when using get method
.htaccess php

php - 使用get方法时如何清理url

发布于 2020-04-11 23:51:14

我目前只有一个product.php页面,该页面在products.php页面上显示每个单独产品的数据

我正在寻找一种方法来清理通过product.php文件显示其数据的每个项目的URL。

当前网址“ rubberholds / product.php?item = item1”

所需的URL“橡胶地/产品/产品一”

products.php

<?php foreach ($limestoneItems as $item => $limestone): ?>    

<a href="product.php?item=<?php echo $item; ?>">
<img 
    src="assets/img/limestone/<?php echo $limestone[img]; ?>.jpg" 
    alt="<?php echo $limestone[alt]; ?>">
</a>

<?php endforeach ?>

product.php

<?php
  if (isset($_GET['item'])) {    
    $limestoneProduct = $_GET['item'];
    $product = $limestoneItems[$limestoneProduct];
  }
?>

数组

$limestoneItems = array(
  "item1" => array(
    title => "Product-One",
    img => "product1",
    alt => "Product1"                  
  )
);

有人对如何实现这一目标有任何建议吗?我想删除.php扩展名,并用$ limestone [title]替换'?item = item1'

编辑

我用以下代码创建了一个.htaccess文件,该文件无法正常工作:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L]

RewriteCond %{REQUEST_FILENAME}\.php -f

RewriteRule ^product/([0-9a-zA-Z_-]+) product.php?item=$1 [NC,L]

查看更多

提问者
glittergirl
被浏览
136
Wahyu Kristianto 2020-02-06 02:03

.htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^rubberholds/product/?(.*)$ rubberholds/product.php?item=$1 [QSA]

测试数据 :

$limestoneItems = [
    'item1' => [
        'title' => 'Product-One',
        'img'   => 'product1',
        'alt'   => 'Product1',
    ],
    'item2' => [
        'title' => 'Product-Two',
        'img'   => 'product2',
        'alt'   => 'Product2',
    ],
    'item3' => [
        'title' => 'Product-Three',
        'img'   => 'product3',
        'alt'   => 'Product3',
    ],
];

product.php

$title = strtolower($_GET['item']);
$data  = array_filter($limestoneItems, function ($v) use ($title) {
    $v['title'] = strtolower($v['title']);

    return in_array($title, $v);
});

if ($data) {
    $key     = array_keys($data)[0];
    $product = $limestoneItems[$key];

    var_dump($product); // Data found
} else {
    var_dump('Not found'); // Data not found
}