使用Laravel项目并尝试简单的URL重写工作。这是.htaccess文件,位于'/ public'文件夹中 - 你可以看到我添加了一个规则
<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>
但是,这只是404s。我怀疑默认规则是以某种方式打破它但是不知道足以解决它。
有人可以帮忙吗?
答案 0 :(得分:0)
在我看来,您将articles/page/{slug}
转换为articles?page={slug}
的规则永远不会被击中。因为规则是最底层的,你的index.php重写规则说它是“最后”规则([L]
)并匹配它每次都赢得的任何东西(即你的新规则永远不会有任何后果)。
在RewriteBase
和RewriteCond
之间移动特定于文章的规则,不要将其标记为最后一条规则(摆脱[L]
),然后重试。这应该将articles/page/{slug}
转换为articles?page=slug
,然后将其传递给index.php规则。
您可能还需要QSA
重写规则选项,以确保您创建的查询字符串适用于已存在的任何查询字符串。
请参阅:
答案 1 :(得分:0)
尝试更改规则的顺序:
<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>
答案 2 :(得分:0)
或者您可以使用Laravel的路线:
Route::get("/articles/page/{article}", "ArticleController@showArticle")
->where("article", "[a-zA-Z0-9/-]+");
控制器:
class ArticleController extends Controller {
public function showArticle( $articleID ) {}
}
我认为这是一种更好的方法。