mod_rewrite: быть перенаправленным в корневую папку;Я хочу, чтобы он оставался в подпапке - PullRequest
2 голосов
/ 18 сентября 2011

У меня есть сайт Zend Framework в этом каталоге /var/www/example.com/ и я поместил блог WP в этом каталоге /var/www/example.com/public/blog/

Ниже перечислены важные файлы ...

/var/www/example.com/public/.htaccessсодержит:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^blog - [NC,L] #Just added this line, it was previous not there
RewriteRule ^.*$ index.php [NC,L]

Тогда мой .htaccess в папке /blog/ выглядит так:

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

Щелчок по сайту Zend работает нормально.Переход в / blog / подпапку загружает блог WP просто отлично.Но когда я нажимаю на любое сообщение в блоге, оно перенаправляется в приложение ZF и не остается в WordPress.

Конечный результат, за которым я гоняюсь, - это сохранить два отдельных, но убедитесь, что обаиз них переписать index.php, чтобы он не отображался в URL.

У меня нет хорошего опыта работы с htaccess, поэтому я не уверен, что происходит.Вот мой VHost просто для примера.

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/var/www/example.com/public"
ServerName example.com
ErrorLog "logs/example.local-error.log"
CustomLog "logs/example.local-access.log" common

<Directory "/var/www/example.com/public" >
         Options Indexes FollowSymLinks
         AllowOverride All
         Order allow,deny
         allow from all

</Directory>

<Location />
        RewriteEngine on
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule !\.(js|ico|gif|jpg|png|css)$ /index.php
</Location>

SetEnv APPLICATION_ENV development

</VirtualHost>

NOTE Я удалил .htaccess в папке /public/ для тестирования из-за правила перезаписи в VHost, но моя проблемаостается.

URL-адреса запросов и ответов совпадают с отображаемыми в браузере:

http://example.local/blog/my-test-blog-post/

ОДНАКО браузер выдает ошибку от ZF, указывая, что она была направлена ​​на public/index.php файл вместо предполагаемого public/blog/index.php файла.Я также использовал Netbeans & XDebug для пошагового выполнения кода.Я помещаю точку останова в первую строку обоих файлов index.php, и, нажимая на ссылку в блоге, он сразу загружает ZF index.php, а не /blog/index.php

Появляется, еслииспользуйте URL-адрес, такой как http://example.local/blog/?p=695, он работает и не направляется в приложение ZF.но когда я использую пользовательские постоянные ссылки в wp-admin, такие как http://example.local/blog/my-test-blog-post/, он пытается перенаправить на ZF.

При просмотре Google показывает, что htaccess в папке /blog/ неверен.Options FollowSymLinks и AllowOverride All оба установлены.Я просто не могу понять это правильно ... http://wordpress.org/support/topic/custom-permalinks-not-working-1

Я также добавлю, что mod_rewrite работает, потому что я могу просто щелкнуть через приложение ZF.

Какпоследнее замечание, эта постоянная ссылка работает на WP:

/index.php/%post_id%/%postname%/

Но я хочу использовать это без индексного файла: /%post_id%/%postname%/

mod_rewrite log:

1(2) init rewrite engine with requested uri /blog/698/test-blog-post/
(1) pass through /blog/698/test-blog-post/
(3) [perdir /] add path info postfix: D:/www/example/public/blog/698 -> D:/www/example/public/blog/698/test-blog-post/
(3) [perdir /] applying pattern '\.(js|ico|gif|jpg|png|css)$' to uri 'D:/www/example/public/blog/698/test-blog-post/'
(4) [perdir /] RewriteCond: input='D:/www/example/public/blog/698' pattern='!-f' => matched
(4) [perdir /] RewriteCond: input='D:/www/example/public/blog/698' pattern='!-d' => matched
(2) [perdir /] rewrite 'D:/www/example/public/blog/698/test-blog-post/' -> '/index.php'
(2) [perdir /] trying to replace prefix / with /
(5) strip matching prefix: /index.php -> index.php
(4) add subst prefix: index.php -> /index.php
(1) [perdir /] internal redirect with /index.php [INTERNAL REDIRECT]
(2) init rewrite engine with requested uri /index.php
(1) pass through /index.php
(3) [perdir /] applying pattern '\.(js|ico|gif|jpg|png|css)$' to uri 'D:/www/example/public/index.php'
(4) [perdir /] RewriteCond: input='D:/www/example/public/index.php' pattern='!-f' => not-matched
(1) [perdir /] pass through D:/www/example/public/index.php

Другой журнал mod_rewrite Попробовав предложение Джейсона Дина (не сработало)

(2) init rewrite engine with requested uri /blog/698/test-blog-post/
(1) pass through /blog/698/test-blog-post/
(3) [perdir /] add path info postfix: D:/www/example/public/blog/698 ->  D:/www/example/public/blog/698/test-blog-post/
(3) [perdir /] applying pattern '\.(js|ico|gif|jpg|png|css)$' to uri 'D:/www/example/public/blog/698/test-blog-post/'
(4) [perdir /] RewriteCond: input='D:/www/example/public/blog/698' pattern='!-f' => matched
(4) [perdir /] RewriteCond: input='D:/www/example/public/blog/698' pattern='!-d' => matched
(2) [perdir /] rewrite 'D:/www/example/public/blog/698/test-blog-post/' -> '/index.php'
(2) [perdir /] trying to replace prefix / with /
(5) strip matching prefix: /index.php -> index.php
(4) add subst prefix: index.php -> /index.php
(1) [perdir /] internal redirect with /index.php [INTERNAL REDIRECT]
(2) init rewrite engine with requested uri /index.php
(1) pass through /index.php
(3) [perdir /] applying pattern '\.(js|ico|gif|jpg|png|css)$' to uri 'D:/www/example/public/index.php'
(4) [perdir /] RewriteCond: input='D:/www/example/public/index.php' pattern='!-f' => not-matched
(1) [perdir /] pass through D:/www/example/public/index.php

1 Ответ

1 голос
/ 18 сентября 2011

Попробуйте добавить:

RewriteCond %{REQUEST_URI} !^/blog

К вашему первому .htaccess

Я думаю, что он перехватывает любые запросы к вашей подпапке блога.

...