#apache #.htaccess #mod-rewrite
#apache #.htaccess #mod-переписать
Вопрос:
Я пытаюсь разрешить пробелы и т. Д. В моем переписывании мода для размещения всех скриптов. Я также заставляю www.
Когда я перехожу к http://mydomain.com это относится к http://www.mydomain.com
Но мой PHP-скрипт считает, что параметр 1 установлен на www. или http: //, а мой маршрутизатор настроен на переключение параметра 1
switch ($rewrite1){
case "": static::home; break;
case "foo": static::foo; break;
default: static::pageNotFound; break;
}
Когда я делаю в htacces, это работает
#RewriteRule ^([a-zA-Z0-9-/] )$ index.php?sn=$1 [QSA]
Но мне сказали, что мне нужно
RewriteRule ^(.*)$ index.php?sn=$1 [QSA,L]
Моя полная переписка мод выглядит следующим образом:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mydomain.com$
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?sn=$1 [QSA,L]
#RewriteRule ^([a-zA-Z0-9-/] )$ index.php?sn=$1 [QSA]
Options -Indexes
Как я могу предотвратить это, указав дополнительные параметры в URL? или это невозможно? Кроме того, %{REQUEST_FILENAME} — лучший способ заставить файлы избегать нашего маршрутизатора, или есть другой способ не допустить, чтобы известные каталоги и типы файлов касались нашего маршрутизатора?
Ответ №1:
Ваш L
флаг необходимости в вашем первом правиле. Сохраняйте свой код таким:
Options -Indexes
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mydomain.com$
RewriteRule ^ http://www.mydomain.com%{REQUEST_URI} [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(. )$ index.php?sn=$1 [QSA,L]