Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使传统的PHP URL与Laravel控制器一起工作?_Laravel_Apache_Routing_Laravel Routing - Fatal编程技术网

如何使传统的PHP URL与Laravel控制器一起工作?

如何使传统的PHP URL与Laravel控制器一起工作?,laravel,apache,routing,laravel-routing,Laravel,Apache,Routing,Laravel Routing,我正在将产品信息页面移动到基于Laravel的控制器,并且在保留原始遗留URL方面存在问题。客户希望保留产品页面URL。传统产品页面URL有两种形式: 1. /12345-product-slug.html 2. /product_info.php?products_id=12345 我得到404页从拉威尔为第二个网址方案 以下是我迄今为止所做的工作 我使用的是Apache的mod_别名、mod_重写和Laravel路由器的组合 DocumentRoot是/var/sites/project,

我正在将产品信息页面移动到基于Laravel的控制器,并且在保留原始遗留URL方面存在问题。客户希望保留产品页面URL。传统产品页面URL有两种形式:

1. /12345-product-slug.html
2. /product_info.php?products_id=12345
我得到404页从拉威尔为第二个网址方案

以下是我迄今为止所做的工作

我使用的是Apache的mod_别名、mod_重写和Laravel路由器的组合

DocumentRoot是
/var/sites/project
,它保存着当前正在生产的遗留代码

新的Laravel项目位于
/var/sites/project/Laravel
中。我想逐步将某些页面(URL)迁移到Laravel项目。因此,我在httpd.conf中有以下内容

Alias /products/ /var/sites/project/laravel/

RewriteRule ^/([0-9]+)-([a-z0-9]+(-[a-z0-9]+)*)\.html$ /products/$1?permalink=$2 [PT]

RewriteCond %{QUERY_STRING} products_id=(\d+)
RewriteRule ^/product_info\.php$ /products/%1? [PT]
我在Laravel的
routes/web.php

Route::get('products/{product}', 'ProductInfoController@index')->name('products');

Route::get('{product}', 'ProductInfoController@index')->where('product', 'product_info\.php\?products_id=([0-9]+)|([0-9]+)-([a-z0-9]+(-[a-z0-9]+)*)\.html');
public function boot()
    {
        parent::boot();

        Route::bind('product', function ($value) {
            if(!preg_match('/([0-9]+)-([a-z0-9]+(-[a-z0-9]+)*)\.html/', $value, $matches)) {
                preg_match('/product_info\.php\?products_id=([0-9]+)/', $value, $matches);
            }
            return Product::findOrFail($matches[1] ?? $value);
        });
    }
我在
RouteServiceProvider.php

Route::get('products/{product}', 'ProductInfoController@index')->name('products');

Route::get('{product}', 'ProductInfoController@index')->where('product', 'product_info\.php\?products_id=([0-9]+)|([0-9]+)-([a-z0-9]+(-[a-z0-9]+)*)\.html');
public function boot()
    {
        parent::boot();

        Route::bind('product', function ($value) {
            if(!preg_match('/([0-9]+)-([a-z0-9]+(-[a-z0-9]+)*)\.html/', $value, $matches)) {
                preg_match('/product_info\.php\?products_id=([0-9]+)/', $value, $matches);
            }
            return Product::findOrFail($matches[1] ?? $value);
        });
    }
我想在下面的URL上访问同一个产品页面,但不是所有页面都能正常工作

  • /产品/12345(工作)
  • /12345-product-slug.html(工作)
  • /product_info.php?products_id=12345(不工作,404页)

我做错了什么?

IMHO你只能用路由做所有事情,你可以尝试这样的事情:
Route::get({slug}.html',…
Route::get('product_info.php',…
IMHO你只能用路由做所有事情,你可以尝试这样的事情:
Route::get({slug}.html',…
Route::get('('product_info.php',..