2016-02-03 52 views
1

我想向不符合Wordpress默認規則的.htaccess文件添加規則。將路由規則添加到Wordpress HTACCESS並保留URL

一切是這樣的:

1- /course/(:any) 

必須重定向到這樣的:

2- /course/?slug=$1 

但我要保持URL 1,沒有查詢字符串。

我試過的一切都給我一個內部服務器錯誤或不符合規則。這是我得到的,並被忽略(因爲wordpress給我看了'找不到頁面'的消息)。所得網址爲像http://localhost/bethmoda/courses/?slug沒有參數,並改變URL

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteRule ^(.*)/course/(.*)$ /bethmoda/course?slug=$2 [L] 

RewriteBase /bethmoda/ 
RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /bethmoda/index.php [L] 
</IfModule> 

# END WordPress 

我怎樣才能做到這一點?

+0

對不起,我沒有抄我的htaccess的內容。它現在編輯 –

回答

1

您可以使用以下規則:

RewriteEngine On 
#Exclude /bethmoda/course/index.php 
RewriteCond %{REQUEST_URI} !^/bethmoda/course/index\.php$ 
RewriteRule ^/?bethmoda/course/(.+)$ /bethmoda/course/?slug=$1 [NC,L] 

的的RewriteCond重要的是要避免在第二重寫迭代RewriteLoop錯誤,否則沒有這個條件,你會得到一個內部服務器錯誤。

+0

我現在得到一個Apache 404錯誤。爲什麼'/ index \ .php $'部分很重要? –

+0

index.php是您課程目錄的目錄處理程序。/course?slug = foo在第二次迭代時更改爲/course/index.php?slug=foo,並匹配導致無限循環錯誤的模式/course/(.*)$。 – starkeen

+0

當然不是我項目中的目標。這是一個wordpress頁面,迴應/ bethmoda/course –

0

下面是一個wordpress的方式來實現你想要的。

如果可能:用其他東西改變「slug」,可以說「course-slug」。

//Add query variable, so that wordpress identifies your custom query string 
function add_custom_query_var($qvars) { 
    $qvars[] = 'course-slug'; 
    return $qvars; 
} 
add_filter('query_vars', 'add_custom_query_var'); 

添加您的自定義重寫規則

//Assumption: course is a page 
add_filter('rewrite_rules_array', 'custom_rewrite_rules'); 
function custom_rewrite_rules($rewrite_rules) 
{ 
    $pattern = "course/([^/]+)?$"; 
    $target = "index.php?" . "name=course&course-slug=\$matches[1]"; 

    // If course was a custom post type 
    // $target = "index.php?" . "post_type=course&course-slug=\$matches[1]"; 

    // If course was a category 
    // $target = "index.php?" . "category_name=course&course-slug=\$matches[1]"; 

    // If course was a tag 
    // $target = "index.php?" . "tag=course&course-slug=\$matches[1]"; 

    $newRules[$pattern] = $target; 

    return array_merge($newRules,$rewrite_rules); 
} 

沖洗永久

Step 1: In the main menu find "Settings > Permalinks". 
Step 2: Scroll down if needed and click "Save Changes". 
Step 3: Rewrite rules and permalinks are flushed.