2017-07-04 34 views
1

這可能看起來像一個重複的問題,但我已經通過儘可能多的SO帖子閱讀相似的標題,並且他們中的每一個都遠遠超過我已經能夠,所以似乎我必須做一些基本的錯誤,但我不知道它是什麼。也就是說,這是我的問題:WordPress的add_rewrite_rule不工作

我正在按照add_rewrite_rule documentation page的「基本用法」部分中的步驟操作,確保刷新和重新生成重寫規則。

我有與68的ID的頁面,我想重定向這樣的:

http://localhost.test.wordpress/leaf/68

這樣:

http://localhost.test.wordpress/index.php?page_id=68

我已經驗證了後者確實存在,我可以直接導航到它。

所以在我的主題的functions.php文件,我寫了下面:

function custom_rewrite_basic() { add_rewrite_rule('^leaf/([0-9]+)/?', 'index.php?page_id=$matches[1]', 'top'); } add_action('init', 'custom_rewrite_basic');

然後我去到設置 - >我的WP管理面板的固定鏈接部分並點擊「保存更改」沒有變化,正如文檔頁面指示我所做的那樣。

我遇到的問題是,當我導航到http://localhost.test.wordpress/leaf/68時,出現404錯誤。顯然,文檔表明這不應該發生,並且我見過的其他所有SO帖子都沒有遇到過這個問題(他們經歷了這一步,並在重定向的其他方面遇到困難)。

我放入functions.php的重定向代碼是從文檔頁面精確複製/粘貼的,但是由於404,我導致相信沒有WP代碼正在運行。你能讓我知道我做錯了什麼嗎?我對WP完全陌生。

+0

我的設置最近有過類似這樣的問題。它確實幫助我獲得了重寫分析器。我用Monkeyman,你可以在插件回購中得到它。 – Spartacus

+0

我對WP非常陌生。我應該能夠通過插件 - >添加插件並搜索'Monkeyman'來找到該插件嗎? –

+0

是的,確切地說。這是Monkeyman重寫分析器。 – Spartacus

回答

2

如果該網站似乎沒有考慮到您對.htaccess文件所做的更改,則應確保<VirtualHost>配置明確賦予.htaccess文件權限以覆蓋某些配置。

在您的<VirtualHost>條目中還應該有一個<Directory>條目。你需要的AllowOverride All命令添加到它,就像這樣:

<Directory /path/to/your/web/document/root> 
     AllowOverride All 
     Require all granted 
</Directory> 

而且,如果該網站是不尊重你的Rewrite命令,你應該確保檢查你的httpd.conf,看看是否mod_rewrite的模塊加載。尋找類似這樣的一行:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so 

如果註釋掉了#,取消該行(刪除#),然後重新啓動你的Apache。

+0

這是我遺漏的AllowOverride All位。謝謝! –

2

根據您在評論中的補充答案,您的.htaccess聽起來不像它的設置正確(獲取服務器404頁而不是WP 404)。以下內容添加到您的.htaccess文件:

# 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 

這重定向(幾乎)每一個請求到index.php,要通過WP內部處理。這需要爲您的rewrite rules to be processed by WP正確設置。

+0

感謝您的信息!不幸的是,這正是我的.htaccess文件已經包含的內容。任何其他想法? –

+1

如果請求甚至沒有進入WP,它必須與您的服務器設置有關。 – Spartacus

+0

我已決定測試是否正在使用.htaccess。爲此,我將其全部內容替換爲:「ErrorDocument 404 /filenotfound.html DirectoryIndex first.html」,然後添加filenotfound.html和first.html以查看。當我導航到localhost.test.wordpress/....時,網站的行爲沒有任何變化。我不確定如何從這一點開始。 –