2014-01-28 104 views
0

工作的一個Laravel項目,並試圖獲得一個簡單的URL重寫工作。下面是.htaccess文件,位於「/公共」文件夾 - 你可以看到我已經添加一條規則Laravel乾淨的URL

<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> 

然而,這只是404。我懷疑默認規則是以某種方式打破它,但不知道是否修復它。

任何人都可以幫忙嗎?

+0

你在瀏覽器訪問URL是什麼? – Andreyco

+0

/articles?page = 2應該成爲/ articles/page/2 – hamishtaplin

回答

0

這樣看來,我認爲您的規則articles/page/{slug}articles?page={slug}從不打轉換。由於規則是最底層的和你的index.php重寫規則說,這是「最後一個」規則([L]),並匹配任何它每次都會獲勝(即從未有任何下降,通過對新規則)。

將您的文章特定規則移到RewriteBaseRewriteCond之間,並且不要將其標記爲最後一條規則(請刪除[L])並重試。這應該轉化成articles/page/{slug}articles?page=slug然後傳遞到index.php的規則。

您可能還需要QSA重寫規則選項,以確保查詢字符串創建已存在的任何查詢字符串的作品。

參見:

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> 
0

或者你可以使用Laravel的路線:

Route::get("/articles/page/{article}", "[email protected]") 
->where("article", "[a-zA-Z0-9/-]+"); 

而且控制器:

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

我認爲這是一個更好的辦法。