Вот часть mod_rewrite моего .htaccess
Options +FollowSymlinks
Options -Indexes
# Prevent Direct Access to files
<FilesMatch "\.(tpl|ini)">
Order deny,allow
Deny from all
</FilesMatch>
# SEO URL Settings
RewriteEngine On
RewriteBase /mysite/
# Protects file paths
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /mysite/index.php?route=$1 [NC,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ /mysite/index.php?route=$1&page=$2 [NC,QSA,L]
</IfModule>
Когда я набираю http://localhost/mysite/home
, он правильно переводит меня на index.php?route=home
.
Когда я печатаю http://localhost/mysite/services/
снова работает, и я могу правильно получить доступ к $_GET['route']
, так, например, мое меню имеет:
<li<?php if($_GET['route'] == 'home') { echo ' class="selected"'; ?>>
, чтобы установить класс на этой странице.
но ....
Когда я набираю http://localhost/mysite/services/widget
, это корректно переводит меня на index.php?route=home&page=widget
, но я получаю ошибку PHP, если пытаюсь сослаться на $_GET['page']
(или ЛЮБОЕ $_GET
значение в этом отношении) ... которое, как я упоминал ранее, я использовал для установки класса selected
пункта меню.
Может кто-нибудь помочь мне исправить это?Должно быть, я сделал что-то не так со вторым rewriterule ... потому что он не принимает значения $_GET
.
...
Это действительно странно, потому что я использую $_GET['route']
и $_GET['page']
, чтобы заполнить правильный HTML-код для страницы (аналогично настройке MVC) ... Я бы подумал, что php include
, который у меня есть на index.php, не будет выполнен, если он не сможет найти$_GET
....
Редактировать:
Возможно, это уместно, но мой код index.php выглядит следующим образом:
if( isset( $_GET[ 'route' ] )) {
if( file_exists( 'content/' . $_GET[ 'route' ] . '.php' )) {
if( isset( $_GET[ 'page' ] )) {
if( file_exists( 'content/' . $_GET[ 'route' ] . '/' . $_GET[ 'page'] . '.php' )) {
include 'content/' . $_GET[ 'route' ] . '/' . $_GET[ 'page'] . '.php';
}
} else {
include 'content/' . $_GET[ 'route' ] . '.php';
}
} else {
header( "Location:404" );
exit;
}
} else {
header( "Location:home" );
exit;
}