Как настроить файл .htaccess для правил перезаписи, чтобы избавиться от расширений, конечных слешей, www? - PullRequest
0 голосов
/ 15 декабря 2011

Это то, что я хочу -

Когда кто-то заходит на site.com/page.php или site.com/page или site.com/page/, все должно работать одинаково, и URL отображается вадресная строка должна быть site.com/page [мне не нравятся расширения и конечные слэши]

Я также хочу избавиться от www из панели URL, так как это не нужно.

Это мои текущие .htaccess файлы Правила перезаписи -

RewriteEngine on
RewriteCond %{HTTP_HOST} ^site\.com
RewriteRule ^(.*)$ http://www.site.com/$1 [R=permanent,L] 

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Это решает проблему с www и расширением, но не с косой чертой!

Но, что более важно, я недавно установилWordPress по адресу site.com/blog, но всякий раз, когда я пытаюсь получить к нему доступ, я вместо этого перенаправляюсь на страницу 404.Это работает, когда я удаляю все переписанные!

Я испортил свои переписывания?Я не регулярное выражение ниндзя!

1 Ответ

1 голос
/ 16 декабря 2011

Попробуйте добавить следующее в начало вашего существующего файла .htaccess, выше любых существующих правил, например, правил Wordpress.

RewriteEngine on
RewriteBase /

#if the host is not site.com, e.g www.site.com
RewriteCond %{HTTP_HOST} !^site\.com$ [NC]
#then redirect to site.com e.g to remove the www
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L] 

#if the URL ends with a slash
RewriteCond %{REQUEST_URI} ^/(.+)/$
#redirect to URL without slash
RewriteRule . http://site.com/%1 [R=301,L] 

#skip wordpress site which starts with blog
RewriteCond %{REQUEST_URI} !^/blog [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
...