Laravel .htaccess使用不同的URL模式来匹配定义的路由

时间:2017-10-26 13:30:08

标签: laravel .htaccess mod-rewrite

我和.htaccess争吵了一下。

我在routes.php中有路由,例如:

/category/{categorySlug}
/product/{productSlug}
/tag/{tagSlug}

我需要使用更好看的网址:

some-category.c.html --> /category/{categorySlug}
iphone-7s.p.html --> /product/{productSlug}
samsung-galaxy.t.html --> /tag/{tagSlug}

它不应该使用重定向,只能识别url模式ant继续进行路由重建url。它应该保持在浏览器上。

我已尝试使用RewriteRule ^(。*)。c.html $ / category / $ 1 [NC]的各种变体,但没有成功(所有其他配置都是新安装Laravel 5.5的默认设置):< / p>

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Tried various flags...
    RewriteRule ^(.*).c.html$ /category/$1 [NC]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

谢谢! :)

1 个答案:

答案 0 :(得分:0)

我不确定尝试自定义.htaccess是最好的方式。

如果您想要这样的路线localhost/some-category.c.html而不是localhost/category/some-category

你应该尝试类似的东西:

Route::get('{categorySlug}.c.html','Controller@method');
Route::get('{productSlug}.p.html','Controller@method');
Route::get('{tagSlug}.t.html','Controller@method');

如果您仍想编辑.htaccess,可以查看这些链接:
- How to change url? htaccess
- url rewriting using htaccess for category & product in php