2016-08-23 163 views
2

我剛剛開始使用URL重寫進行播放,我觀看/閱讀了一些教程,但是我仍然沒有真正瞭解重寫的工作原理。htaccess在本地主機上不工作

我創建了一個.htaccess文件並將其放在我的根目錄中。 我目前正在使用Apache在本地機器上工作。

我想http://localhost:5216/index.php重定向到http://localhost:5216/index

在我的.htaccess文件我有以下幾點:

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^index?$ index.php 

這是行不通的。我試過刷新頁面,我檢查了httpd.conf文件已選中AllowOverride All。 我已經閱讀了一些教程,我認爲我以正確的方式做到了這一點,但看起來我沒有這樣做。我的文件有什麼問題?

回答

1

我想http://localhost:5216/index.php重定向到http://localhost:5216/index

RewriteRule ^index?$ index.php 

RewriteRule實際上做相反的...它/index重寫(或/inde因爲你所做的最後x可選購)index.php 。請注意,這是內部重寫,而不是外部重定向。您的RewriteRule接近您可能想要做的。這使您可以鏈接到/index(在您的應用程序中)並仍然服務於實際的/index.php文件。


採取這一一步......假設你有一個接觸文檔中的文檔根被稱爲「接觸最monster.php」 - 這是對你的文件系統的物理文件。但是您想使用簡單的URL /contact來訪問此文檔 - 這是您在整個應用程序中使用的URL。你不想讓任何用戶看到文件名「contact-the-monster.php」。然後在你的根.htaccess文件,你需要內部重寫/contact所有請求/contact-the-monster.php,是這樣的:

RewriteRule ^contact$ contact-the-monster.php [L] 

包含在LLAST)標誌,因爲你可能不需要做別的事。


確保MultiViews未啓用。這可以在.htaccess使用Options指令禁用:

Options +FollowSymLinks -MultiViews 

MultiViews可以與mod_rewrite的衝突產生意想不到的效果。特別是當你的URL映射到文件減去文件擴展名。

+0

所以它應該看起來像這樣? RewriteRule^index index.php – davidb

+0

雖然我會在模式中添加一個字符串錨點('$')的結尾,但這樣可以。即。 'RewriteRule^index $ index.php'。否則它會匹配'/ index-anything'。你必須小心重寫/重定向循環,儘管在這個例子中你應該沒問題。我用另一個例子更新了我的答案。 – MrWhite

+0

我試過了你給我看的方式。我也檢查了一些其他教程,它仍然無法正常工作。 我寫這 重寫規則^指數的index.php [NC,L] 重寫規則^輪廓/([0-9A-ZA-Z] +)profile.php?用戶名= $ 1 [NC] 這些都不兩項工作。 htaccess文件應該位於根目錄(我的所有.php和.html文件都在這裏),這是正確的嗎? – davidb

0

其實我已經面臨同樣的問題,並認爲根本沒有解決方案可以幫助,但我發現這個小小的代碼行使了魔法。

Options +FollowSymLinks -MultiViews 

它添加到您的.htaccess文件的第一行,一切都應該像一個魅力。感謝分享。

相關問題