Удалять.php из URL-адресов с htaccess

EDIT: current .файл htaccess:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## hide .php extension snippet

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.]+).php [NC]
RewriteRule ^ %1 [R,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/.php -f
RewriteRule ^(.*?)/?$ .php [L]

мой сайт размещается в подпапке домена, подключенного к большой учетной записи хостинга.

basesite
  /iioengine
    /forums
      /.htaccess //file works
      /.... //other MyBB content
    /demos.php
    /index.php //iioengine.com (homepage)
    /.htaccess //file doesn't work
    /... //other iioengine php pages

проблема в том, что я использую два разных файла htaccess?

вот ссылка, которая должна работать:http://iioengine.com/demos

я заметил, что этот текущий файл htaccess нарушает все URL-адреса форумов, а также

Это уже не работает: http://iioengine.com/forums/Forum-Box2D

EDIT: Спасибо за открытие, я добился некоторого прогресса. Вот мой текущий файл htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
</IfModule>

Я все еще получаю 404 страницы, но если я поставлю эту строку:

RewriteRule . /index.php [L]

все не-'.запросы php перенаправляются на главную страницу... Поэтому mod_rewrite определенно включен, он просто не работает правильно. Кто-нибудь знает, в чем может быть проблема?

редактировать: это не дубликат - ни одно из других решений не работает для меня. Мой вопрос не существуют решения, его почему они не работают для меня. Никто не смог это решить, я сам пробовал много решений. Разве смысл этого форума не в том, чтобы найти решения конкретных проблем?

позвольте мне уточнить...

у меня MyBB работает в подпапке, и его перезаписи работают нормально. Эта ссылка, например, работает: http://iioengine.com/forums/Forum-Box2D

все страницы php, которые не являются частью MyBB, все еще имеют.расширение PHP в их URL - я пытаюсь удалить их, но ничего не работает. Пример: http://iioengine.com/demos

... [оригинальный пост]

существует, очевидно, много информации об этом, но я пробовал почти дюжину различных решений и не прошел мимо страницы 404.

здесь есть мой сайт:http://iioengine.com/, Все страницы php, и все, кроме главной страницы и все страницы форумов имеют'.php' в конце их URL, который я хотел бы удалить.

в дополнение к перенаправлению non -'.php "запрашивает правильные страницы, я также хотел бы удалить".php "часть, даже если она является частью запроса (потому что все мое содержимое уже указывает".php' в своих гиперссылках).

это то, что у меня есть до сих пор, в основном взято из этот пост, но это не работает, я получаю страницу 404.

RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ .php [L,QSA]
RewriteCond %{REQUEST_URI} ^/(.*).php$
RewriteRule ^(.*)$ %1 [L,QSA]

что мне нужно в моем файле htaccess, чтобы удалить расширение файла из URL во всех случаях? Спасибо

5 ответов


попробуйте этот код для скрытия .php (будет работать в обе стороны):

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## don't touch /forum URIs
RewriteRule ^forums/ - [L,NC]

## hide .php extension snippet

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [L]

попробуйте это.

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ .php [L,QSA]
</IfModule>

если это не работает, то ваш Север не активирован mod_rewrite или не поддерживает перезапись url.


вот самый простой синтаксис, который я нашел, который приведет, как показано ниже:

RewriteEngine on
RewriteRule ^/?PrivacyPolicy$ legal.php?mode=privacy [NC,L]
RewriteRule ^Report/([0-9]+)$ report.php?id= [NC,L] 

результаты:

  1. PrivacyPolicy для юридических.РНР?режим конфиденциальности
  2. Report / 55 to report.РНР?id=55

Это должно работать

Options -Indexes +FollowSymlinks -MultiViews

RewriteEngine on

DirectoryIndex index.php

# REDIRECT Force requests for named index files to drop the index file filename, and force non-www to avoid redirect loop
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]*/)*index\.(html?|php[45]?)(\?[^\ ]*)?\ HTTP/
RewriteRule ^(([^/]*/)*)index\.(html?|php[45]?)$ http://example.com/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/([^\.]+)\.php\ HTTP/
RewriteRule ^([a-zA-Z0-9_-]+)/([^.]+)\.php$ http://example.com// [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/([^/]+)/([^\.]+)\.php\ HTTP/
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([^.]+)\.php$ http://example.com/// [R=301,L]

# REDIRECT www to non-wwww
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule .? http://example.com%{REQUEST_URI} [R=301,L]

# REWRITE url to filepath
RewriteRule ^([a-zA-Z0-9_-]+)/([^/.]+)$ //.php [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([^/.]+)$ ///.php [L]

в apache 2.4 и более поздних версиях вы можете использовать следующее правило с конец флаг снять .php расширение из URL.

RewriteEngine on

RewriteRule ^(.+)\.php$ / [NC,L,R=301]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)/?$ /.php [END]