С помощью htaccess я пытаюсь очистить URL-адреса своих сайтов. Я использую очень простые URL-адреса, например: www.mysite.com/pagename.php ("pagename" - переменная).
Я хочу, чтобы www.mysite.com/pagename отображал содержимое /pagename.php
Итак, это сейчас в моем htaccess-файле:
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Но я также хочу, чтобы мои старые URL-адреса (/pagename.php) при вызове переписывались на www.mysite.com/pagename.
Как это сделать? Не могу понять (все время петли) ...
Заранее спасибо!
Добавьте еще один блок, чтобы определить перезапись:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^([^\.]+)\.php$ $1 [NC,R=301,L]
RewriteRule ^([^\.]+)$ $1.php [NC,PT,L]
Обратите внимание, что RewriteBase
здесь очень важно. (См. Документацию по адресу http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase) - иначе ваши URL-адреса будут переписаны на что-то вроде <hostname>/var/www/pagename.php
вместо ожидаемого <hostname>/index.php
.