2012-07-06 79 views
2

我已經創建了一個規則,允許用戶傳遞這樣一個變量的主頁網址傳遞變量:somepage.com/database/12345在內部它更改爲somepage.com/database/ ?db_index = 12345它工作正常。代碼如下所示:mod_rewrite的 - 直接從不工作

RewriteBase/
RewriteRule ^database/([0-9]+)/?$ /database/?db_index=$1 

現在我需要做的完全一樣,但不需要在變量前面傳遞「database /」。所以用戶可以像這樣傳遞變量:somepage.com/12345。它必須是一個附加選項,而不是前一個的替代品。我試圖這樣做:

RewriteRule ^([0-9]+)/?$ /database/?db_index=$1 [L] 

但我只是不能得到這個工作,我不知道爲什麼。上面的附加代碼直接插入到上一個工作規則之前。

如果我的方法不起作用,我會很樂意爲您提供幫助和解釋。

UPDATE:整個.htaccess文件看起來是這樣的:

# Block the include-only files. 
RewriteEngine On 
RewriteBase/
RewriteRule ^wp-admin/includes/ - [F,L] 
RewriteRule !^wp-includes/ - [S=3] 
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] 
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] 
RewriteRule ^wp-includes/theme-compat/ - [F,L] 

# direct url rewrite 
RewriteEngine On 
RewriteBase/
RewriteRule ^([0-9]+)/?$ /database/?db_index=$1 [L] 
RewriteRule ^database/([0-9]+)/?$ /database/?db_index=$1 

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 
+1

奇怪,這應該工作。你得到的錯誤是什麼? – kapa 2012-07-06 13:00:22

+0

Yeap,努力看到這個問題 – Utkanos 2012-07-06 13:01:32

+0

我得到#404,所以顯示結果的模板頁面甚至沒有加載。我正在粘貼.htaccess文件的全部內容 - 可能在其他地方存在問題? – NoviQ 2012-07-06 13:08:13

回答

1

此致看起來好像沒什麼問題,但嘗試:RewriteRule ^/?([0-9]+)/?$ /database/?db_index=$1 [R=301]

+0

它的工作原理,但顯示與var名稱的URL(as somesite.com/database?db_index=123),所以我稍微修改它:** RewriteRule^/?([0-9] +)/?$/database/$ 1 [R = 301] ** - 現在它就像魅力一樣,非常感謝!你有什麼想法爲什麼以前的解決方案根本無法工作? – NoviQ 2012-07-06 14:25:34

+0

@NoviQ - 兩種可能的原因:(1)模式中的「^ /?」;或者(2)在規則中用'[L]'發出。你可以記錄重寫的東西來調試它,並找到原因,如果你想,但是當你找到一個替代解決方案,你不必挖掘它:)祝你好運! – 2012-07-06 14:36:30

+0

再次非常感謝! – NoviQ 2012-07-06 14:38:43