2013-11-23 69 views
0

我已經編輯喜歡的httpd.conf文件:htaccess並不在XAMPP工作在Windows

  • 改爲了AllowOverride所有

這裏是我的.htaccess文件:

RewriteEngine On 
RewriteRule ^shirts/$ /shirts/shirts.php 
RewriteRule ^shirts/([0-9]+)/$ /shirts/shirt.php?id=$1 
RewriteRule ^receipt.php$ /receipt/ [R=301] 
RewriteRule ^contact.php$ /contact/ [R=301] 
RewriteRule ^shirts.php$ /shirts/ [R=301] 
RewriteRule ^(shirts/[0-9]+)$ /$1/ [R=301] 

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ 
RewriteRule ^shirt.php$ /shirts/%1/? [R=301] 

而文件夾結構是這樣的:

shirts4mike
+接觸
+ CSS
+ IMG
+ INC
+收據
+襯衫
| _ shirt.php
| _ shirts.php
- 的.htaccess
- favicon.ico的
- index.php

我試了很多次,但它仍然顯示索引文件不退出,當我點擊t他在主頁上襯衫。
我認爲xampp會忽略.htaccess文件。
如果是這樣,我該如何解決?

+0

您是否在'httpd.conf'中包含了'LoadModule rewrite_module modules/mod_rewrite.so'並且重新啓動了服務?您需要停止並啓動apache,以使'httpd.conf'中的任何更改生效。 – Sumurai8

+0

@ Sumurai8嗨,我已經包括它。我發現如果我將這些文件放在shirts4mike文件夾之外,這意味着這些文件位於根文件夾中。它的工作原理,如果沒有,不工作... – Jusleong

+0

'shirts4mike'你的http根(ala'http:// example.com'試圖在'shirts4mike'中加載'index.php'?) – Sumurai8

回答

1

這個問題似乎是你試圖重寫一個子目錄中的url,但它鏈接到http-root目錄。您需要在子目錄中有.htaccess文件。您會注意到像RewriteRule ^test$ /testing-is-fun這樣的規則將在網址http://example.com/shirts4mike/test上匹配,但會重寫爲您的http-root中的文件testing-is-fun。因此我們需要修改規則的重寫部分。

此修復程序具有相對網址,而不是絕對網址。這可以通過刪除前綴/來完成。對於重定向,定義RewriteBase及其子目錄。我也會爲每個規則添加[L]標誌。你應該.htaccess看起來是這樣的:

RewriteEngine On 
RewriteBase /shirts4mike/ 

RewriteRule ^shirts/$ shirts/shirts.php [L] 
RewriteRule ^shirts/([0-9]+)/$ shirts/shirt.php?id=$1 [L] 
RewriteRule ^receipt.php$ receipt/ [R=301,L] 
RewriteRule ^contact.php$ contact/ [R=301,L] 
RewriteRule ^shirts.php$ shirts/ [R=301,L] 
RewriteRule ^(shirts/[0-9]+)$ $1/ [R=301,L] 

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ 
RewriteRule ^shirt.php$ shirts/%1/? [R=301,L] 

作爲一個側面說明:我鼓勵你這樣做,而測試的RewriteRules不使用[R=301]。某些瀏覽器緩存永久重定向以提高性能。如果您的規則按照您期望的那樣工作,這很好,但如果情況並非如此,那麼進一步的測試可能會鏈接到您的舊頁面。這意味着當您更改.htaccess時,您必須清除緩存以查看當前情況。