2017-08-10 139 views
0

我見過幾個答案,但他們都沒有爲我工作。難以使用.htaccess重寫網址

如何使用我的.htaccess重寫下面的內容? mod_rewrite在我的文件中。

http://example.com/local/vendor/index.php?handle=Company 

是:

http://example.com/local/vendor/Company 
+0

您需要**嘗試自己編寫代碼**。在[**做更多的研究**之後](https://meta.stackoverflow.com/q/261592/1011527)如果你有問題**發佈你已經嘗試了**的**明確的解釋不工作**並提供[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。閱讀[如何問](http://stackoverflow.com/help/how-to-ask)一個很好的問題。請務必[參觀](http://stackoverflow.com/tour)並閱讀[this](https://meta.stackoverflow.com/q/347937/1011527)。 –

+0

周杰倫 - 我是新手編程,我只是想得到答案,所以我可以得到一個網站的生活。我期待像你這樣的評論。感謝任何可以提供的幫助。 – greeves

+0

[參考:mod \ _rewrite,URL重寫和「漂亮鏈接」可能的重複解釋](https://stackoverflow.com/questions/20563772/reference-mod-rewrite-url-rewriting-and-pretty-links-explained ) –

回答

0

如何改寫下面...

這裏有可能是一個更根本的問題。你不要重寫這樣在.htaccess。您將從「朋友」URL重寫爲回到實際的URL /文件系統路徑。所以,這是反過來,你重寫來自:

http://example.com/local/vendor/Company 

到您的應用程序期待實際的URL:

http://example.com/local/vendor/index.php?handle=Company 

例如:

RewriteEngine On 

RewriteRule ^(local/vendor)/(Company)$ /$1/index.php?handle=$2 [L] 

$1$2是反向引用到RewriteRule模式中的被捕獲組。

上面的內容只是你說的具體的URL,即。 /local/vendor/Company。我懷疑「公司」是想成爲一個佔位符?在這種情況下,你需要使這個更一般。例如:

RewriteRule ^(local/vendor)/(\w+)$ /$1/index.php?handle=$2 [L] 

\w是單詞字符的簡寫字符類。這不包括點(即.),因此在重寫爲index.php時避免了重寫循環。


UPDATE:以上假定您的.htaccess文件位於文檔根目錄,即。 example.com/.htaccess。但是,如果.htaccess文件位於/local子目錄(即example.com/local/.htaccess。) - 當你出現在意見建議 - 那麼你就需要調整上述指令從RewriteRule模式刪除local/和刪除斜槓前綴替代。例如:

RewriteRule ^(vendor)/(\w+)$ $1/index.php?handle=$2 [L] 
+0

感謝您的快速回復。我試過這個,但它仍然不起作用。也許我應該說「本地」是我的文檔根。這會改變什麼嗎? 當我在瀏覽器中鍵入http:// localhost/local/vendor/Company時,它給了我404。它將替換爲供應商處理 404我得到的是「在此服務器上找不到所請求的URL /本地/供應商/公司」。 – greeves

+0

術語問題的位數我認爲......如果「本地」是您的_document root_(我的意思是您的「文檔根目錄」),那麼它根本就不在您的URL中。 (文檔根目錄是定義公共文件根目錄的文件系統路徑 - 它是服務器配置中的配置指令。)如果「本地」僅僅是您從中提供文件的子目錄,並且是該目錄的位置。 htaccess'文件,那麼你應該從上面的指令中刪除'local /'。 – MrWhite

+0

我已經更新了我的答案。 – MrWhite