mod_rewrite с вложенными файлами .htaccess - PullRequest
2 голосов
/ 23 июня 2010

Я сделал .htaccess в моем корневом каталоге для создания уровня поддоменов, предположим, что sub.domain.ex перенаправляет на domain.ex/deb/

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} sub.domain.ex
RewriteCond %{REQUEST_URI} !deb/
RewriteRule ^(.*)$ /deb/$1 [L]

и это хорошо работает.

Теперь я перехожу к /deb/ и создаю еще один .htaccess со следующим

RewriteEngine on
RewriteRule ^([^/]+)/ /deb.php?app=$1 [NC]

deb.php - это файл, который печатает аргумент "app". Это работает, но только если я позвоню http://sub.domain.ex/something/ (обратите внимание на косую черту в конце). Он работает только с последней косой чертой, если я удаляю ее, это не так, и я хочу, чтобы она работала без последней косой черты.

Итак, я изменил правило на ^([^/]+), но теперь у меня есть внутренняя ошибка 500 Apache. Тренеры с регулярными выражениями на моей стороне с выбором, может быть, я что-то упустил. Спасибо


UPDATE

Я схожу с ума. Возможно, неправильно помещать один .htaccess в корень для создания se 3-го подуровня doman и .htacces в другом каталоге? Потому что я пытаюсь уловить. Я использую это правило

RewriteEngine on
RewriteRule ^([^/]+)/ deb.php?app=$1 [NC]

в .htacces каталога /deb и сделал print_r($_GET); и вызвал index.php. Таким образом, редирект вообще не работает, если он перенаправляет меня на index.php подуровня cydia и не принимает /deb/deb.php !!! Резюме. моя структура каталогов такая:

/htdocs/ -> the root of the main domain level like www.example.com
---index.php -> home file of www.example.com

/htdocs/deb -> the root directory of the 3th sublevel domain (subdomain.example.com ->
---index.php
---deb.php

Таким образом, .htaccess для домена 3-го уровня находится в /htdocs./htaccess и описан, как и раньше. Другой .htaccess для «украсить» ссылку находится в /htdocs/deb/.htaccess. Я хочу, чтобы при переходе на subdomain.domain.com/someText он преобразовывался в deb.php? App = someText

Теперь я попытался перейти на subdomain.domain.com/deb.php....WTF !? deb.php находится в /htdocs/deb/deb.php

Дом ясен

Ответы [ 4 ]

2 голосов
/ 24 июня 2010

Это прекрасно работает для меня, по крайней мере, если я понял все, что вы хотели.

В /htdocs/.htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} =sub.domain.ex
RewriteCond %{REQUEST_URI} !^deb/
RewriteRule ^(.*)$ /deb/$1

В /htdocs/deb/.htaccess:

RewriteEngine On
RewriteBase /deb/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ deb.php?app=$1
RewriteRule !^deb.php index.php

Редактировать: Я обновил содержимое второго файла, чтобы отразить ваши дополнительные запросы.Вы должны удалить /?, если не хотите, чтобы они могли перейти на sub.domain.ex/something/ -> deb.php?app=something.

0 голосов
/ 24 июня 2010

Я думаю, что у моего хозяина есть какие-то ограничения.Это невозможно.Я перепробовал все виды goo (для regexcoach) для сопоставления с правильной группой, и нет ничего более 500 ошибок apache.Единственный способ заставить это работать - использовать параметры tu с этим ^app/([^/]+) /deb.php?app=$1 и вызывать с sub.domain.com/app/nameTest, и это работает с или без обратной косой черты.Если у вас есть несколько советов, как избавиться от этого, пожалуйста, дайте мне знать.прощай

0 голосов
/ 24 июня 2010

Правило переписывания должно быть

RewriteRule ^(.*)$ deb.php?app=$1 [L,QSA]

Это распространенный шаблон, используемый в CMS, таких как Drupal

0 голосов
/ 24 июня 2010

Я могу ошибаться, но во втором .htaccess вы должны проверить, что URL еще не переписан с помощью "/deb.php"

Так что-то вроде

RewriteCond %{REQUEST_URI} !deb\.php
RewriteRule ^([^/]+) /deb.php?app=$1 [NC]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...