Разъяснить все другие ответы:
+++++++++++++++++++++
DoStuff(a++);
эквивалентен:
DoStuff(a);
a = a + 1;
+++++++++++++++++++++
DoStuff(++a);
эквивалентен:
a = a + 1;
DoStuff(a);
+++++++++++++++++++++
DoStuff(a + 1);
эквивалентен:
b = a + 1;
DoStuff(b);
+++++++++++++++++++++
Использование механизма перезаписи - довольно тяжелый способ решить эту проблему. Вот более простое решение:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
# real server configuration
</VirtualHost>
И тогда у вас будет еще один раздел
с ServerName www.example.com
для вашей реальной конфигурации сервера. Apache автоматически сохраняет все, что находится после /
, при использовании директивы Redirect
, что является распространенным заблуждением относительно того, почему этот метод не работает (хотя на самом деле он работает).
RewriteCond %{HTTP_HOST} ^!example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
Это начинается с переменной HTTP_HOST
, которая содержит только часть имени домена входящего URL ( example.com
). Предполагая, что имя домена не содержит www.
и точно соответствует вашему доменному имени, тогда в игру вступает RewriteRule. Шаблон ^ (. *) $
будет соответствовать всему в REQUEST_URI
, который является ресурсом, запрошенным в HTTP-запросе ( foo / blah / index.html
). Он сохраняет это в обратной ссылке, которая затем используется для перезаписи URL с новым доменным именем (которое начинается с www
).
[NC]
indicates case-insensitive pattern matching, [R=301]
indicates an external redirect using code 301 (resource moved permanently), and [L]
stops all further rewriting, and redirects immediately.
Попробуйте следующее:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*) http://www.example.com$1 [R=301]
Чтобы удалить www
с вашего URL
веб-сайта, используйте этот код в своем файле .htaccess
:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1$1 [R=301,L]
Для принудительного www
на вашем веб-сайте URL
используйте этот код на .htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^YourSite.com$
RewriteRule ^(.*)$ http://www.yourSite.com/$1 [R=301]
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^(([^/]+/)*[^./]+)$ /$1.html [R=301,L]
, где YourSite.com
необходимо заменить на ваш URL
.
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
Я запустил это ...
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.*$ [NC]
RewriteRule ^/.+www\/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Мне нужно, чтобы это было универсальным для 25+ доменов на нашем новом сервере, поэтому эта директива находится в моем файле virtual.conf в теге
Мне пришлось немного взломать правило перезаписи, поскольку полный docroot выполнялся при сопоставлении с шаблоном, несмотря на то, что http: // httpd. apache.org/docs/2.2/mod/mod_rewrite.html говорит о том, что это только вещи после хоста и порта.