Лучше переписать мод — не www. => www. устанавливает мой 1 доллар и отключает мой переключатель для имен страниц

#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]