如何使传统的PHP URL与Laravel控制器一起工作?
我正在将产品信息页面移动到基于Laravel的控制器,并且在保留原始遗留URL方面存在问题。客户希望保留产品页面URL。传统产品页面URL有两种形式:如何使传统的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,
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',..