2012-11-08 74 views
3

我的index.php只有一個行,我也有隻有兩行的.htaccess在它

RewriteEngine on 
RewriteRule ^([a-z]+)$ ?a=$1 

爲什麼當我輸入/ab.cd我收到一個404錯誤,但是如果我輸入/abcd.它不會給我一個404錯誤和PHP回聲abcd(在URL末尾沒有點)。

有人可以告訴我爲什麼我的重寫規則允許通過abcd.而不是給我一個404錯誤?

回答

0

編輯:

我只是測試你的重寫規則(獨立)在我的開發環境和它的作品。它不允許/abcd.通過我的 - 它給了我一個404錯誤,所以你的環境中必須有某些東西影響你的規則。

- 初始後

/ab.cd貌似期間未在重寫規則定義() - 只是小寫a-Z字符。

用途:

RewriteEngine on 
RewriteRule ^([a-z.]+)$ ?a=$1 
       ^
+0

在這種情況下,PHP回聲只有abcd(沒有網址末尾的點),但不會給我一個404錯誤。 – user1809008

+0

我認爲他對第二種情況更感興趣,爲什麼'abcd.'不會產生404錯誤。 – meagar

0

你使用正則表達式,([a-z]+),只匹配了小寫字母 「A」 到 「Z」。它永遠不會匹配一系列字母,後跟一個句點,然後是一系列字母,例如您嘗試使用ab.cd

如果您想要匹配句點,則需要([a-z.]+)

+0

如果我輸入/ abcd,我想得到404錯誤。 (在網址的結尾處有點) – user1809008

+0

您使用的表達式不應與'abcd.'匹配。猜測,也許你的瀏覽器正在剝離這段時間?這似乎是非常不正確的行爲,但我無法建議任何其他事項來檢查我的頭頂。 – meagar

+0

@meagar這可能是OP中的標點符號,但我可能是錯的。 – nickhar

0

我剛剛重建我的服務器上的情況,我得到所需的404錯誤。我只將[L]標誌添加到RewriteRule中。

的.htaccess

RewriteEngine on 
RewriteRule ^([a-z]+)$ test.php?a=$1 [L] 

test.php的

<?php echo $_GET['a']; ?> 

是否有可能下面可能與你的要求干涉任何其他重寫規則?即使在包含其他文件?在這種情況下,L標誌可能會對您有所幫助。

相關問題