Я пишу веб-сайт, который динамически заполняется через базу данных 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]
Вы можете использовать этот код в файле /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]
Основываясь на упомянутой вами отладке, в вашем.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
гарантирует, что если пользовательский запрос соответствует этому правилу, дальнейшие правила (в том числе вызывающие проблему) не будут выполнены.
mobile/home
который приравнивается к mobile/index.php/home
что должно быть возможно
Спасибо за ответы, которые вы оба дали, однако ни один из них не работал, я сейчас решил проблему, это связано с окончательным 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]
Чтобы он работал как с мобильными, так и с настольными сайтами.
/mobile/
также?