【问题标题】:PHP When rewrite pages urls how to remove or redirect category.php?cat_id=2 urls to rewrited urls?PHP 当重写页面 urls 如何删除或重定向 category.php?cat_id=2 urls 到重写的 urls?
【发布时间】:2021-02-26 07:04:06
【问题描述】:

我正在使用这个URL rewriting with PHP 文件夹结构来重写 URL。我完成了它工作正常,但是在重写 URL 之后,好的,现在我有两个 URL,一个是简单的 URL,如 /~admin/product-category.php?cat_id=2,第二个重写 URL /~admin/product-category/men-items 那么如何将第一个 URL 重定向到第二个 URL?或者只是第一个 URL 不应该因为重复的内容问题。

我的项目链接:

第一个链接:http://199.192.21.232/~admin/product-category.php?cat_id=2 重写链接:http://199.192.21.232/~admin/product-category/men-items

脚本

define( 'INCLUDE_DIR', dirname( __FILE__ ) . '/' );

$rules = array( 
    'picture'   => "/picture/(?'text'[^/]+)/(?'id'\d+)",    // '/picture/some-text/51'
    'album'     => "/album/(?'album'[\w\-]+)",              // '/album/album-slug'
    'category'  => "/product-category/(?'product_category'[\w\-]+)",        // '/category/category-slug'
    'page'      => "/page/(?'page'about|contact)",          // '/page/about', '/page/contact'
    'post'      => "/(?'post'[\w\-]+)",                     // '/post-slug'
    'home'      => "/"                                      // '/'
);

$uri = rtrim( dirname($_SERVER["SCRIPT_NAME"]), '/' );
$uri = '/' . trim( str_replace( $uri, '', $_SERVER['REQUEST_URI'] ), '/' );
$uri = urldecode( $uri );

foreach ( $rules as $action => $rule ) {
    if ( preg_match( '~^'.$rule.'$~i', $uri, $params ) ) {
        include( INCLUDE_DIR . $action . '.php' );
        exit();
    }
}

include( INCLUDE_DIR . '404.php' );

.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

【问题讨论】:

  • 这里的category.php 是什么?一些现有的 PHP 文件?你想把这段代码放在哪里?您了解您尝试使用的代码吗?
  • yes ``` category.php 是现有的 PHP 文件。我正在使用它来重写页面,您可以在此处查看用于重写 URL 的文件夹结构stackoverflow.com/questions/16388959/url-rewriting-with-php
  • 我看到了 SO 线程,您的问题中有指向它的链接。你想把这段代码放在哪里?您了解该代码应该如何工作吗?您是否了解重写的 URI 将由 index.php 处理,而不是 category.php 拥有 .htaccesscategory.php 的目的到底是什么?为什么最初不正确生成所有链接?
  • 是的,我明白我只是更新我的问题,请检查提供的链接。这段代码,一切正常。我只想删除或重定向第一个链接到重写链接。因为它正在创建重复的内容问题谷歌将索引两个 URL 我只想要一个 URL,如 199.192.21.232/~admin/product-category/men-items
  • 据我了解,/~admin/product-category.php?cat_id=2 URI 使用 /~admin/product-category.php PHP 脚本提供服务,重写后的 /~admin/product-category/men-items URI 也应该使用相同的 PHP 脚本提供服务。有了.htaccess,重写的链接将与您的index.php一起提供,而不是product-category.php

标签: php redirect url-rewriting


【解决方案1】:

以下是引用的代码示例应该如何工作:

product-category.php

<?php
define( 'INCLUDE_DIR', dirname( __FILE__ ) . '/' );

$rules = array( 
    'redirect-category'  => "/product-category\\.php\\?cat_id=(?'category'\\d+)"
);

$uri = $_SERVER['REQUEST_URI'];
$uri = urldecode( $uri );

foreach ( $rules as $action => $rule ) {
    if ( preg_match( '#'.$rule.'#', $uri, $params ) ) {
        include( INCLUDE_DIR . $action . '.php' );
        exit();
    }
}

redirect-category.php

<?php
$categories = array(
    2 => 'men-items'
);
header("Location: " . preg_replace( '#'.$rule.'#', "/product_category/{$categories[$params['category']]}/", $uri ));

【讨论】:

  • 这段代码将 /~admin/product-category.php?cat_id=2 重定向到 /~admin/product-category/men-items ??
  • 应该是这样。然而,/~admin/product-category/men-items 的请求又将由index.php 提供服务,如果你想通过product-category.php 提供服务,你应该通过.htaccess 来提供服务。我不知道如何正确地做到这一点,很多年前我已经放弃了 apache 来支持 nginx。
  • 好的,谢谢您的帮助,但我只想知道是否有人访问此网址 /~admin/product-category.php?cat_id=2 所以将其重定向到 /~admin/product-category/men -项目
【解决方案2】:

在您的 htaccess 顶部,放置以下规则:

RewriteEngine on

RewriteCond %{QUERY_STRING} ^cat_id=2$ [NC]
RewriteRule category.php$ http://199.192.21.232/~admin/product-category/men-items? [L,R=302]

这会将http://199.192.21.232/~admin/product-category.php?cat_id=2 重定向到http://199.192.21.232/~admin/product-category/men-items

如果您有多个具有相同 queryString 的旧 URL,只需将条件模式从 ^cat_id=2$ 更改为 ^cat_id=.+$ 。 当您确定重定向工作正常时,将 R=302 更改为 R=301 以使重定向永久化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 2020-08-03
    • 2021-12-30
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多