Добавить правило перезаписи URL в Wordpress - PullRequest
8 голосов
/ 12 декабря 2011

Я написал плагин Wordpress, который добавляет строку запроса к URL.Однако я не могу изменить htaccess, чтобы переписать это.Не уверен, что Wordpress переопределяет его?

Текущий 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

И URL, который я пытаюсь переписать:

http://domain.com/deal-info/?id=87&post_name=testdealtitle

Желаемый URL:

http://domain.com/deal-info/87/testdealtitle

Я пытался добавить:

RewriteRule ^([^/]*)/([^/]*)$ /deal-info/?id=$1&post_name=$2 [L]

безрезультатно.Любые идеи приветствуются!

Ответы [ 2 ]

11 голосов
/ 12 декабря 2011

Когда вы делаете это:

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

Это означает: «если это не файл и не каталог, перенаправьте все входящие URL-адреса на index.php.

Ваш rewriterule должен работать ... если вы не поставите его после предыдущего rewriterule. Итак, вы вкратце уверены, что ваш .htaccess это так:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^([^/]*)/([^/]*)$ /deal-info/?id=$1&post_name=$2 [L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Скажите, пожалуйста, работает ли он?


Более того, если вы хотите перенаправить только only deal-info, вам следует сделать что-то вроде (непроверено):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^(/)?deal-info/([^/]*)/([^/]*)$ /deal-info/?id=$2&post_name=$3 [L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Два совета:


Пожалуйста, попробуйте использовать директиву RewriteLog: она поможет вам отследить такие проблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

Могу ли я попросить вас добавить переписать в вашем вопросе?

1 голос
/ 12 декабря 2011

После большого замешательства я нашел ответ здесь: https://wordpress.stackexchange.com/questions/5413/need-help-with-add-rewrite-rule

Хотя я думаю, что правильный способ сделать это -: http://codex.wordpress.org/Rewrite_API/add_rewrite_rule

Я не уверен, что вы можетесделать это напрямую в htaccess, или у меня возникла проблема с конфликтом с другим плагином, который я использовал.

Еще раз спасибо Оливье за ​​его обширный ответ!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...