2014-10-31 235 views
2

我會誠實地說我對.htaccess的經驗很少,因爲我一直想盡我所能遠離它。不過,我最近想收拾我的網址,我發現可以通過.htaccess並重寫。.htaccess url重寫不起作用?

基本上,我想重寫像一個網址:

www.mysite.com/profile.php?id=48194

喜歡的東西:

WWW .mysite.com/profile/48194

這裏是我有currentl的代碼Y:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 
RewriteRule ^profile/(.*)/$ profile.php?id=$1 

我試圖使用該生產線是在最底部,RewriteRule ^profile/(.*)/$ profile.php?id=$1。其餘部分用於從網址中刪除附加頁面。我已經將$1更改爲$2,認爲它可能與上述代碼衝突,但沒有任何變化。

我還刪除了除RewriteEngine on之外的所有代碼,最後一行認爲代碼可能存在衝突,但再次沒有任何更改或工作。其餘的代碼確實有效,從urls中刪除了擴展,所以我知道重寫的東西已經開啓。

有人可以嘗試分解並解釋我做錯了什麼,以及這是如何工作的?以及提供我想要完成的事情的工作示例?

在此先感謝!

回答

0

更改您的規則的順序並使用MultiViews選項。選項MultiViewsApache's content negotiation module使用,它在mod_rewrite之前運行,並且使Apache服務器匹配文件擴展名。所以/file可以在URL中,但它將服務/file.php

RewriteEngine on 
RewriteBase/

RewriteRule ^profile/([^/]+)/?$ profile.php?id=$1 [L,QSA,NC] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC] 
RewriteRule ^(.+?)/?$ $1.php [L] 
+1

對不起,遲了回覆,最近忙着一份新工作。感謝你的回答! – Neytorokx 2014-11-26 18:49:53

+0

沒有問題,很高興它解決了。 – anubhava 2014-11-26 18:52:00