Нужно заставить один RewriteRule играть хорошо с другим, смущающе слабое понимание принципов mod_rewrite - PullRequest
1 голос
/ 26 августа 2010

У меня есть следующая система:

Windows Server '03
IIS 6 (пристрелите меня)
PHP 5.2.14
Wordpress 3.0.1
WPML 1.8.1.2

Я добавил Wordpress на существующий сайт с большим трафиком, в каталог, который мы назовем

http://thehost/wordpress/

Для функций, подобных mod_rewrite, я использую ISAPI_Rewrite 3.1.0.76 от Helicon. Я использую его для включения «симпатичных» постоянных ссылок в установке Wordpress. Единственное правило таково:

RewriteRule ^ / wordpress / (?! index.php) (?! wp) ([^.] *) $ /Wordpress/index.php/$1 [I, L]

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

Мой сайт полностью двуязычный. Нет страниц, которые не входят ни в один из следующих подкаталогов:

http://thehost/en/ для английского языка и

http://thehost/sp/ для испанского.

Это соглашение, которое я собираюсь поддерживать, даже для установки Wordpress. В настоящее время у меня работает несколько взломанная версия WPML (многоязычный плагин Wordpress), и она работает таким образом, что все страницы и сообщения, независимо от языка, включают в себя URL / en / или / sp / в URL. Это заставило меня поверить, что я очень близок - возможно, только один RewriteRule! - чтобы мои URL-адреса Wordpress соответствовали тому же соглашению URL, что и остальная часть моего сайта. Однако, как я уже описал, моя проблема в том, что я не могу заставить его работать.

Итак, если у меня есть этот URL где-то в моей установке Wordpress:

http://thehost/wordpress/en/2010/08/omg-this-post-is-in-english/

как я могу преобразовать его в

http://thehost/en/wordpress/2010/08/omg-this-post-is-in-english/

пока не теряет постоянных ссылок Wordpress? Мне удалось переместить / en / в правильное местоположение ( ^ / en / wordpress /(.*) / wordpress / en / $ 1 ), но я не могу заставить играть два правила приятно вместе. Это моя проблема. Ну, это и некоторые другие не подходят для stackoverflow.com.

Спасибо за ваше время.

1 Ответ

1 голос
/ 10 декабря 2010

Попробуйте объединить правила с флагом "C".Пример:

RewriteRule ^/en/wordpress/(.*) /wordpress/en/$1 [C]
RewriteRule ^/wordpress/(?!index.php)(?!wp)([^.]*)$ /wordpress/index.php/$1 [I,L]
...