Некоторые URL не работают при использовании .htaccess для удаления .php из URL - PullRequest
1 голос
/ 16 марта 2012

У меня проблема с использованием файла .htaccess для перезаписи моих URL без .php в них.Это работает для некоторых адресов, но не для других.Вот что находится в моем файле .htaccess ..

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php

#rewrite url up to 3 levels
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

У меня на сайте следующая структура папок / файлов ..

index.php
about-us
  index.php
  careers.php
our-work
  index.php
  test.php
  client1
    example.php

Следующие URL работают..

example.com

example.com / about-us

example.com / our-work

example.com / our-work / client1 / example

Но они не работают ..

example.com / our-work / test

example.com /о нас / карьере

Я только что получил ошибку 404.

Есть идеи, почему это происходит?

1 Ответ

1 голос
/ 16 марта 2012

У вас нет правила 2 уровня, только правило 1 уровня и 3 уровня. Вы должны добавить:

#rewrite url to 2 levels
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php

Вероятно, вы должны добавить к вашему правилу 3 уровня условие RewriteCond:

#rewrite url to 3 levels
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php

Это предотвратит вызов правила, если существует каталог с таким же именем или файл PHP не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...