2014-10-31 180 views
0

這是我的htaccess代碼:與htaccess的URL重寫不工作

RewriteEngine On 
RewriteRule ^/typo3$ - [L] RewriteRule ^/typo3/.*$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule .* /index.php 
RewriteRule ^/([a-zA-Z0-9_-]+)$ http://www.example.com/index.php?id=82&user=$1 [L,R=301] 

顯然,我希望這個網址: www.example.com/username 被翻譯成http://www.example.com/index.php?id=82&user=username

這不起作用然而..(在htaccess的這段代碼的結果不是在所有的工作,並得到一個找不到網頁錯誤

如果我改變] + $對於] +代碼的工作,但沒有像我想:?

RewriteEngine On 
RewriteRule ^/typo3$ - [L] RewriteRule ^/typo3/.*$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule .* /index.php 
RewriteRule ^/([a-zA-Z0-9_-]+)? http://www.example.com/index.php?id=82&user=$1 [L,R=301] 

URL被重寫/重定向到http://www.example.com/index.php?id=82&user=index的結果...正是這樣,用user = index。現在

,如果我刪除重寫規則。*的index.php線,htaccess的再不能在工作中都下去了,導致找不到網頁錯誤...

我花了幾天在搞清楚了這一點,但我絕對沒有線索天..

所以,我只是想www.example.com/username重定向到http://www.example.com/index.php?id=82&user=username

+0

我想通過簡單的匹配(唯一)的用戶名來獲取ID ...我看到沒有其他辦法。但RewriteRules仍然不能在我的服務器上工作。真奇怪。 – 2014-11-06 11:17:50

+0

**通過簡單地匹配(唯一)用戶名來獲得ID。**匹配如何完成? – anubhava 2014-11-06 11:27:43

+0

通過進行SQL查詢比較 – 2014-11-06 13:48:12

回答

1

這裏有幾個問題。

  • 在.htaccess文件中,模式匹配"against the filesystem path, after removing the prefix"。這意味着,您將沒有前導斜槓,如/typo3^/([a-zA-Z0-9_-]+)?
  • 模式([a-zA-Z0-9_-]+)?也匹配一個空請求,因爲尾隨?。我想,這不是你想要的。
  • 規則按順序處理,除非你做一個重定向[R]或添加[L]標誌。這就是爲什麼第一個請求被改寫爲index.php,然後在接下來的規則index是公認的用戶,並再次改寫爲.../index.php?id=82&user=index
  • 這導致了下一個問題的模式.*([a-zA-Z0-9_-]+)的原因。 .*承認所有請求,包括每一個用戶。因此無法區分用戶和其他任何請求。

要重寫的用戶名,你可以嘗試

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z0-9_-]+) http://www.example.com/index.php?id=82&user=$1 [L] 

這意味着,如果該請求不符合現有的文件!-f或目錄!-d,則假定它是一個用戶名和重寫index.php?...

如果你不想重定向,離開了主機名

RewriteRule ^([a-zA-Z0-9_-]+) /index.php?id=82&user=$1 [L] 
+0

感謝您的意見Olaf。你會如何建議我寫我的代碼,以達到我需要的東西?謝謝你的幫助。 – 2014-10-31 08:59:55

+0

如何區分用戶名和其他有效請求? – 2014-10-31 09:03:52

+0

這是一個很好的問題,我希望我知道答案 事情是,我需要這個功能:如果常規頁面或文件夾已經存在,那麼不要重寫請求,只顯示該文件夾或文件(例如:www.example.com/admin ..但是,如果它不存在,請將其重寫爲用戶URL(/index.php?id=82&user=username) – 2014-10-31 09:07:28