.htaccess 拉威尔清洁网址

.htaccess 拉威尔清洁网址,.htaccess,laravel,clean-urls,.htaccess,Laravel,Clean Urls,在一个Laravel项目上工作,并试图让一个简单的URL重写正常工作。这是位于“/public”文件夹中的.htaccess文件-您可以看到我添加了一条规则 <IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] # above is de

在一个Laravel项目上工作,并试图让一个简单的URL重写正常工作。这是位于“/public”文件夹中的.htaccess文件-您可以看到我添加了一条规则

<IfModule mod_rewrite.c>
  Options -MultiViews
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]
  # above is default, rule added by me:
  RewriteRule ^articles/page/([a-zA-Z0-9-/]+)$ /articles?page=$1 [L]
</IfModule>

选项-多视图
重新启动发动机
重写基/
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]
#以上为默认,由我添加的规则:
重写规则^articles/page/([a-zA-Z0-9-/]+)$/articles?page=$1[L]
然而,这只是404。我怀疑默认规则在某种程度上破坏了它,但我不知道如何修复它


有人能帮忙吗?

在我看来,您将
文章/page/{slug}
转换为
文章的规则从未被执行过。因为该规则是最底层的,并且您的index.php重写规则表示它是“最后一个”规则(
[L]
),并且每次都匹配它赢得的任何东西(即,您的新规则永远不会失败)

将您的文章特定规则在
RewriteBase
RewriteCond
之间移动,不要将其标记为最后一条规则(去掉
[L]
),然后重试。这应该将
articles/page/{slug}
转换为
articles?page=slug
,然后将其传递给index.php规则

您可能还需要使用
QSA
rewrite rule选项来确保您创建的查询字符串与任何已经存在的查询字符串一起工作

见:


尝试更改规则的顺序:

<IfModule mod_rewrite.c>
  Options -MultiViews
  RewriteEngine On
  RewriteBase /

  # above is default, rule added by me:
  RewriteRule ^articles/page/([a-zA-Z0-9/-]+)/?$ /articles?page=$1 [L,QSA]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]
</IfModule>

选项-多视图
重新启动发动机
重写基/
#以上为默认,由我添加的规则:
重写规则^articles/page/([a-zA-Z0-9/-]+)/?$/articles?page=$1[L,QSA]
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]

或者您可以使用Laravel的路线:

Route::get("/articles/page/{article}", "ArticleController@showArticle")
->where("article", "[a-zA-Z0-9/-]+");
以及控制器:

class ArticleController extends Controller {
    public function showArticle( $articleID ) {}
}

我认为这是一个更好的方法。

您在浏览器中访问什么URL?/articles?page=2应该变成/articles/page/2