2012-03-26 2 views
0

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

настоящее время у меня один файл .htaccess в корне моего сайта, который выполняет простую URL Rewrite:

Options -MultiViews 
# CheckSpelling off 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?url=$1 [L] 
ErrorDocument 404 /index.php 

Я в настоящее время работает на втором этапе развития этого сайта, и я ve сделал копию в подпапке (например, www.abcdef.com/new/). Проблема в том, что на данный момент, если я нажму ссылку на этом сайте реплики, она перенаправляет меня на исходную страницу root, тогда как я хочу, чтобы она перешла на эквивалентную страницу в новой/папке. Я положил еще один файл .htaccess в этой новой папке /, которая, однако, не имеет какого-либо заметного эффекта:

Options -MultiViews 
# CheckSpelling off 
RewriteEngine On 
RewriteBase /new/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /new/index.php?url=$1 [L] 
ErrorDocument 404 /index.php 

Так что мой вопрос: не является ли это допустимо иметь другой файл .htaccess в подпапках, как это ? И если да, то почему не работают эти строки?

Заранее благодарим за любые идеи!

G

+0

У вас может быть столько же.htaccess, как вы хотите, но они обрабатываются в порядке глубины дерева каталогов. Если более высокий .htaccess перенаправляет в другое место до того, как будет достигнут более низкий .htaccess, нижний будет даже не загружаться/разбираться/выполняться. –

ответ

0

Вы говорите

Проблема, на данный момент, если я нажимаю ссылку на эту реплику сайта, он перенаправляет меня к корню, оригинал страницы, в то время как я хочу, чтобы перейти к эквивалент страницы в новой папке.

Возможно, вы используете абсолютные ссылки на своих страницах, а не относительные? Например, если ссылка выглядит как "/sample", если на вашем основном сайте она будет ссылаться на http://.../sample и то же самое верно, если ссылка находится на странице ниже "/new/". Если вы используете только "sample", тогда это будет разрешено как http://..../sample или http://...../new/sample, в зависимости от URL-адреса страницы.

+0

Спасибо, ты прав - я использую абсолютные ссылки, т. Е./Образец. Дело в том, что на исходном сайте есть сотни ссылок, поэтому я не могу их изменить. Вы знаете, есть ли способ переписать их, чтобы перейти в подпапку? – GluePear

+0

Я не думаю, что есть быстрое решение этого. Обычно они не должны начинаться с «/». Можете ли вы выполнить поиск в файлах для ''/'? Возможно, этот поиск найдет все ваши« неправильные корни »hrefs? – CyberDude

+0

Ок, куда-то. Большинство ссылок находятся в дБ, поэтому я изменил код, который записывает их на страницу, чтобы удалить исходный «/». Однако они все еще переписываются в корневой каталог! Я думал, что это мог быть ответ на мои проблемы ... – GluePear

0

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

Вы уверены, что ссылки на сайте верны? (например, это /new/foo, а не только /foo)?

+0

Нет, ссылки только для/foo, а не для/new/foo. Я надеялся, что смогу сохранить существующие ссылки (которых есть сотни) и перенаправить их в локальную папку (new /). – GluePear

+0

Это связано с переписыванием содержимого HTML, которое 'mod_rewrite' не делает. Вы могли бы сделать ужасную, ужасную магию, включающую проверку поля referrer ... Но это было бы действительно последним средством, так как оно сломалось бы, когда когда-либо кто-то копировал + вставляет ссылку. –

+0

Дэвид, спасибо за вашу помощь, вы и кибердайда были правы, и теперь я изменил абсолютные ссылки, которые он работает. Приветствия. – GluePear

2

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

Вы устанавливаете RewriteBase, который explicitly sets the base URL-path (not filesystem directory path!) for per-directory rewrites.

Так что, похоже, как ваши запросы будут переписаны /new/new/index.php, путь и каталог, который, вероятно, не существует в файловой системе (таким образом, не отвечают вашему RewriteCond с) и таким перенаправляются на ваш /index.php 404.

в качестве теста, возможно, попробуйте изменить ErrorDocument к:

ErrorDocument 404 /new/index.php

Если вы видите переписано вызовы идут на это, то это действительно может быть вашим RewriteBase.

+0

Они не собираются на 404 - они идут на правильную страницу, но на исходном сайте, а не на копию в новом /. Вероятно, это связано с тем, что, как говорит CyberDude ниже, я использую абсолютные ссылки. Спасибо за ваш ответ. – GluePear

Смежные вопросы