Как получить два правила перезаписи htaccess, чтобы «хорошо играть» вместе? - PullRequest
1 голос
/ 03 июля 2011

В корне моего веб-сайта у меня есть следующее, чтобы перенаправить на не www домен

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^www\.notails\.com [NC]
RewriteRule ^(.*)$ http://notails.com/$1 [R=301,NC]

в подпапке с именем «фотография» у меня есть это ...

RewriteEngine on
RewriteRule ^show/([^/\.]+)/([^/]+)$ show.php?section=$1&photoid=$2 [L]

Все, что находится внутри папки с фотографиями, игнорирует правило удаления www. Как я могу получить эти два правила, чтобы оба применялись к папкам / файлам в папке с фотографиями?

Также ... мой корневой 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

Может ли это быть помехой? У меня есть собственный WordPress блог, но он не находится в корне сайта, он находится в подпапке под названием «блог», поэтому я не знаю, почему это правило находится в файле htaccess моего корня. Могу ли я переместить это?

Редактировать: Просто чтобы указать, на случай, если это не очевидно - я полный нуб, когда дело доходит до вещей htaccess и mod_rewrite. Переопределяет ли файл htaccess в подпапке какие-либо файлы htaccess ближе к корню, чем он? Или содержимое htaccess объединяется?

Редактировать 2: Я попытался переместить второе правило в тот же файл htaccess, что и правило удаления www, как показано в следующем коде ...

# 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

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^www\.notails\.com [NC]
RewriteRule ^(.*)$ http://notails.com/$1 [R=301,NC]
RewriteRule ^photography/show/([^/\.]+)/([^/]+)$ photography/show.php?section=$1&photoid=$2 [L]

Если я затем перехожу на одну из моих страниц с фотографиями, она разрешается в соответствии с предполагаемым URL (например, http://notails.com/photography/show/pointofayre/260), но страница 404.

Если я вручную добавлю к нему 'www', отменяет другое правило ... (http://notails.com/show.php?section=pointofayre&photoid=260) и удаляет из него 'photography /'.

1 Ответ

3 голосов
/ 03 июля 2011

Добавьте RewriteOptions inherit в .htaccess в папке «фотография», потому что сейчас все правила перезаписи из родительских папок игнорируются (поведение по умолчанию).

В качестве альтернативы можно переместить правила перезаписи из этой подпапки .htaccess в корневую (вам нужно будет немного изменить свое правило, исправив путь - добавление photography/ может быть достаточно, зависит от фактического местоположения "фотографии")


UPDATE: Ваш root .htaccess может быть таким:

Options +FollowSymlinks

<IfModule mod_rewrite.c>
    # activate rewrite engine
    RewriteEngine On
    # we are in the root
    RewriteBase /

    # no www please
    RewriteCond %{HTTP_HOST} ^www\.notails\.com [NC]
    RewriteRule ^(.*)$ http://notails.com/$1 [R=301,L,QSA]

    # photography
    RewriteRule ^photography/show/([^/\.]+)/([^/]+)$ /photography/show.php?section=$1&photoid=$2 [L]

    # WordPress rules
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
...