2011-06-08 74 views
0

我想要(例如)這個URL重寫有什麼問題?

discuss/1/title/where-are-you 

輸出

discussPage.php?id=1&title=where-are-you 

我有一個.htaccess文件,該文件是在相同的目錄中discussPage.php以下命令:

# Enable Rewriting 
RewriteEngine on 

# Rewrite user URLs 
# Input: discuss/ID/title/TITLE 
# Output: discussPage.php?tid=NAME&title=TITLE 

RewriteRule ^discuss/(\w+)/(\w+)/(\w+)/?$ discussPage.php?id=$1&title=$3 

右現在,當我嘗試訪問discuss/1/title/where-are-you等頁面時,出現404錯誤,即使discussPage.php?id=1&title=where-are-you works fine.

P.S. mod_rewrite已啓用(我已將其用於其他目的)。

回答

2

你的問題是\ w不匹配最後一位中的「 - 」。

你可以簡單地在那裏使用更寬的字符類如[\w-]+。我會小心使用像[^/]這樣的解決方案,因爲它們允許除斜槓之外的任何內容,這是非常寬容的。白名單總是更安全,避免意外。

# Enable Rewriting 
RewriteEngine on 

# Rewrite user URLs 
# Input: discuss/ID/title/TITLE 
# Output: discussPage.php?tid=NAME&title=TITLE 

RewriteRule ^discuss/(\w+)/(\w+)/([\w-]+)/?$ discussPage.php?id=$1&title=$3 

注意,-必須是最後的字符類,否則你應該逃避它,因爲如果它在其他兩個字符之間它表現爲一個範圍,像[a-z]

-1

要調試,您可以隨時echo $_SERVER['QUERY_STRING'];

但我相信正確的代碼會是這樣的。

RewriteEngine on 
RewriteBase/

    RewriteRule ^discuss/([0-9]+)/title/([a-z0-9\-]+)?$ discussPage.php?id=$1&title=$2 [NC,QSA] 

不過你可能想修復你的RewriteBase值。

另外 - 正如在上一個條件中所看到的,您只能在where-are-you部件中使用字母數字字符和連字符。 (但東西告訴我你不會需要其他字符!)

-2

工作對我來說:

RewriteEngine On 
RewriteBase/
RewriteRule ^discuss/([^/]+)/([^/]+)/([^/]+)/?$ discussPage.php?id=$1&title=$3 [R] 
+0

這就是我說的 – Teneff 2011-06-08 13:24:14

+2

@Teneff:差不多。正如其他人所說,你錯過了\ w不匹配。無論如何,算法代碼今天正在降低心情。 – 2011-06-08 13:28:43