Проблемы перезаписи HTAccess

0

Я пишу веб-сайт, который динамически заполняется через базу данных Oracle.

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

Однако для моего рабочего стола все построено из файла index.php, чтобы он был полностью динамичным. Поэтому страницы выглядят так: www.domain.com/index.php/page в URL.

Для рабочего стола это работает. Я использую общее правило перезаписи удаления index.php, чтобы затем сделать URL-адрес www.domain.com/page однако, на той же странице, что и предыдущий URL.

Моя проблема заключается в том, что теперь у меня есть сайт www.domain.com/mobile/index.php. Создано и по большей части работает, однако при попытке добавить дополнительные динамические страницы на мобильный сайт. www.domain.com/mobile/index.php/about, например, просто перенаправляет на www.domain.com/mobile/ и она даже не включает about часть URL.

После большой отладки я обнаружил, что это определенно .htaccess который вызывает проблему.

Если у вас есть какое-либо понимание моей проблемы, пожалуйста, помогите мне.

заранее спасибо

ИЗМЕНИТЬ 1

Правила перезаписи следующие:

# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
  • 0
    Пожалуйста, добавьте правила переписывания к вашему вопросу.
  • 0
    У вас есть .htaccess внутри /mobile/ также?
Показать ещё 1 комментарий
Теги:
.htaccess
rewrite

3 ответа

1
Лучший ответ

Вы можете использовать этот код в файле /mobile/.htaccess:

DirectoryIndex index.php
RewriteEngine On
RewriteBase /mobile/

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^index\.php(?:/(.*))?$ $1 [L,R=302,NC,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php/$1 [L]

Это переопределит все правила, присутствующие в родительском пути.htaccess для /mobile/ URI.


Упрощенная версия, чтобы заставить ее работать в корневом каталоге.htaccess:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^(mobile)/(.*)$ $1/index.php/$2 [L,NC]

# Directs all EE web requests through the site index file
RewriteRule ^(.*)$ /index.php/$1 [L]
  • 0
    Я не хотел иметь более одного .htaccess для сайта, однако, глядя на ваш ответ, логично, что он будет работать, и поэтому я приму этот ответ, однако, для тех, кто видит этот вопрос и любит меня, хотел сделать это все в одном файле, я тоже разместил свое решение.
  • 0
    Спасибо, что приняли. Я также выложил упрощенную версию root .htaccess из вашего ответа.
1

Основываясь на упомянутой вами отладке, в вашем.htaccess есть правило, которое переписывает www.domain.com/mobile/index.php/about на www.domain.com/mobile/. Итак, если вы обнаружите, какое это правило, вы можете добавить одно над ним, которое будет ловить запрошенные URL-адреса для ваших мобильных страниц, а затем не разрешать выполнение проблемного следующего правила. Что-то вроде этого:

RewriteRule ^mobile/index.php/([a-zA-Z0-9-_]+)$ ^mobile/index.php/$1 [L,QSA]

L гарантирует, что если пользовательский запрос соответствует этому правилу, дальнейшие правила (в том числе вызывающие проблему) не будут выполнены.

  • 0
    Есть ли у вас какие-либо подсказки, какое из 2 правил это? или я должен просто поставить это выше обоих правил?
  • 0
    Кроме того, опубликованное вами правило выглядит так, как будто оно не заменяет index.php ничем. В основном, я хочу закончить mobile/home который приравнивается к mobile/index.php/home что должно быть возможно
Показать ещё 4 комментария
0

Спасибо за ответы, которые вы оба дали, однако ни один из них не работал, я сейчас решил проблему, это связано с окончательным RewriteRule в конце

# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

Мне нужно было изменить его на

# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !/mobile/.* [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /mobile/.* [NC]
RewriteRule ^(.*)$ mobile/index.php/$1 [L]

Чтобы он работал как с мобильными, так и с настольными сайтами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню