2017-04-17 114 views
1

我想要使用htaccess重寫URL,但似乎無法使其工作。使用.htaccess URL重寫

我試圖重寫http://website.com/pages/blog/article.php?article=blog-entry以便它可以輸入爲http://website.com/pages/blog/blog-entry,但是當我嘗試以下方法我得到一個錯誤:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 

RewriteRule ^pages/blog/(.+)$ pages/blog/article.php?article=$1 [NC,L] 

任何人都可以看到我要去哪裏錯了,因爲這只是給了我一個404錯誤。提前致謝。

+0

嗨,不,我要重寫/pages/blog/article.php?article=article-name到/頁/博客/文章名稱,這樣我就可以使用與_GET [「文章']在一個PHP查詢 – mckeegan375

+0

是'/ pages/blog /'一個真實的目錄? – anubhava

+0

是的,/網頁/博客都是真實的文件夾,所以也許只是/ article-name我想重寫到article.php?article = article-name? – mckeegan375

回答

1

使用此規則裏面/pages/blog/.htaccess

RewriteEngine on 
RewriteBase /pages/blog/ 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\w-]+)/?$ article.php?article=$1 [QSA,L] 
1

我試圖重寫 http://website.com/pages/blog.php?article=blog-entry,以便它可以 輸入爲http://website.com/pages/blog/blog-entry,但是當我嘗試以下方法我發現了一個 錯誤:

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond 
%{REQUEST_FILENAME}\.php -f 

RewriteRule ^pages/blog/(.+)$ pages/blog/article.php?article=$1 
[NC,L] 

你的措辭是混亂,但我相信這是你的意思:

真實的網址是:http://website.com/pages/blog.php?article=blog-entry

您希望能夠使用'友好'網址:http://website.com/pages/blog/blog-entry指向真實網址。

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^pages/blog/(.+)$ /pages/blog/article.php?article=$1 [QSA,L] 

前兩個測試問:這是一個存在的目錄嗎?這是一個存在的文件嗎?因爲article.php是一個文件,所以它不會被包含在這個動作中,所以你不會進入一個無限循環,這對於重寫規則不正確的做法總會有風險。

取給定的url,並使用查詢字符串追加(QSA)將所需的數據附加到將處理請求的實際文件。這不是重寫,因爲用戶看到的url不會改變,這隻發生在apache內部,它會將請求發送到所需的目標,並具有所需的信息。

您必須測試文件或目錄是否存在,否則您會錯誤地應用此規則,因爲只應在目標不存在時應用該規則。基本上這就是所有博客/ CMS的搜索引擎友好型網站的工作方式,或多或少。

最後,由於目標是/blog.php?article=blog-entry,因此您不能跳過前導/。

然而,這是我不清楚爲什麼你要友好的URL要這麼長時間,什麼時候你可以讓它短,友好:喜歡,頁/ [文章名稱]

+0

由於'-f'和'-d'需要完整的文件系統路徑,因此應將'RewriteCond%{REQUEST_URI}!-d'替換爲'RewriteCond%{REQUEST_FILENAME}!-d'。 – anubhava

+1

大腦bloop,謝謝你的修正,修正它。除此之外,我傾向於避免將小型htaccess文件放在整個位置,因此很難跟蹤它們,更容易使用一個主文件,並使用完整路徑在/中。 – Lizardx