2013-07-15 4 views
1

Общая проблема, но слишком сложная для меня.htaccess, www redirect поддельный подкаталог

Вот требования, котор я пытаюсь встретить:

  1. Корневой URL http://example.com должен быть перенаправлен на http://www.example.com
  2. Все URL, как http://example.com/c/1234567890 должны быть перенаправлены на http://www.example.com/c/1234567890 (обратите внимание на «C» фальшивый подкаталог)
  3. При вводе http://example.com/index.php один должен быть перенаправлен на http://www.example.com (без трейлинга не режет)
  4. кроме того, я пытаюсь, но не в состоянии обеспечить вложенную папку «xy» из прямого доступа, кроме файлов php, в файлы root и javascript.

Я много искал и пытался много переписать условия и правила, но htaccess + regex - это просто с другой планеты для меня. :/ Извините, если это дубликат ...

+0

Есть ли адреса в http://example.com/[something], которые не должны перенаправляться на http: //www,example.com/ [something]? Я спрашиваю, потому что обычный способ удовлетворения первого требования может перенаправить все связанные пути, а не только верх. – Paul

+0

Эй, не будет адресов, например example.com/[something] just example.com/search?=xy. Все остальное содержит поддельную подпапку «c», что означает, что это будет example.com/c/[something] – Tobias

+0

Итак, если никто не искал «c», а просто перенаправил все с example.com на www.example.com, сохраняя то, что приходит после косой черты, которая заботится о # 1 и № 2, правильно? Это также верно для № 3? Не так, как написано ... Правильно ли # 3, вы хотите, чтобы example.com/index.php перешел на www.example.con без /, а также нет /index.php? или вы хотите, чтобы example.com/index.php перешел на сайт www.example.com/index.php? Если вы решите № 3 неправильно, вы можете щелкнуть править и пересмотреть его. – Paul

ответ

2

Это будет файл htaccess в вашем корневом каталоге документа. Включите переписывания двигатель

RewriteEngine On 

Для 1 и 2: перенаправление на "WWW", если запрос корневому или запрос на /c/(something)

RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^(c/.+)?$ http://www.example.com%{REQUEST_URI} [L,R=301] 

Для 3: перенаправлять прямые запросы на /index.php только /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php 
RewriteRule ^/[L,R=301] 

Для 4: запретите прямой доступ ко всему, что находится в каталоге /xy/.

RewriteCond %{HTTP_REFERER} !http://(www\.)?example\.com/ [NC] 
RewriteRule ^xy/ - [L,F] 
+0

Большое спасибо за ваш ответ! Я пробовал 1-3 сейчас, но как-то только перенаправление с [example.com] на [www.example.com] и удаление конечных слэшей [/], если на root работает хорошо. Не знаю, не хватает ли я чего-то ... – Tobias

+0

# 4 является избыточным, так как мне нужен доступ к папке [xy] через Ajax. Должен ли я удалить его из моего первоначального вопроса? – Tobias

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