2015-03-11 2 views
0

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

Например: Корневая папка проекта - new_project. Если URL-адрес равен http://localhost/new_project/test/something/, тогда мне нужно отправить test/something/ в index.php в качестве параметра. Иначе, если URL-адрес похож на http://localhost/new_project/something/, тогда мне нужно загрузить содержимое из папки directory/something.

Ниже приводится .htaccess файл я написал до сих пор:

Options +FollowSymLinks 
RewriteEngine on 

# Force Trailing Slash 
RewriteCond %{REQUEST_URI} /+[^\.]+$ 
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L] 

# Send request via index.php (again, not if its a real file or folder) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L] 

# Serve other requests from the directory/ folder 
RewriteRule ^(.*)$ directory/$1 [L] 

Что нужно изменить в приведенном выше .htaccess файле, так что появление test строки в URL передает строку после строки test вместе со строкой test до index.php, и если URL-адрес не содержит строку test, затем загружает содержимое из папки directory?

+1

Где вы размещаете 'test' в URL-адресе? Покажите несколько образцов. –

+0

В приведенном выше вопросе я добавил несколько примеров URL-адресов и сценариев. – SUB0DH

ответ

1

Вы можете проверить для test/ внутри самого RewriteRule. Поместите более конкретное правило перезаписи до правила перехвата «catch-all» directory/.

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_URI} /+[^\.]+$ 
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L] 

# All requests starting with `test/` go to index (without the `test` part). 
RewriteRule ^test/(.*)$ index.php?/$1 [L] # Not sure how GET parameters starting with `?/` behave. 

# All others go to directory. Assuming not a valid file or dir. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ directory/$1 [L] 
+0

На самом деле мне нужно отправить запросы, не содержащие строку 'test' в' directory'. Если URL-адрес содержит строку 'test', то только ему нужно передать' index.php' – SUB0DH

+0

. Я неправильно прочитал ранее, отредактировал. – ojrask

+0

Спасибо за ответ. Второй htaccess сделал именно то, что я хотел. Но использование первого файла .htaccess вызвало ошибку «500», и следующая ошибка была в журнале ошибок Apache: 'Запрос превысил предел 10 внутренних переадресаций из-за вероятной ошибки конфигурации. Используйте «LimitInternalRecursion», чтобы увеличить предел, если это необходимо. Используйте 'LogLevel debug', чтобы получить backtrace.' – SUB0DH

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