Удалить расширение php сайта с помощью htaccess

1

У меня есть эти ссылки на моем сайте:

http://crw4u.be/werkgever.php (я могу добавить только 2 URL-адреса в мой вопрос, так как я n00b)

Я добавил код для htaccess, поэтому я могу получить доступ к этим страницам без php:

http://crw4u.be/werkgever

Он отлично работает с этим кодом:

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

Тем не менее я использую определенные формы в своих php файлах:

<form name="planning" enctype="multipart/form-data" method="post" action="email/index.php">

И я получаю ошибки при отправке формы с добавленным кодом в htaccess:

Не найдено. Запрошенный URL/email/не найден на этом сервере.

Кто-нибудь знает, как адаптировать этот код? Я искал и тестировал, но, похоже, не могу это решить.

Высоко ценится!

Tomas

Теги:
.htaccess

2 ответа

1
Лучший ответ

Попробуйте это правило: -

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

Вот основное описание того, как работают правила:

Обычные выражения

. (any character)
* (zero of more of the preceding)
+ (one or more of the preceding)
{} (minimum to maximum quantifier)
? (ungreedy modifier)
! (at start of string means "negative pattern")
^ (start of string, or "negative" if at the start of a range)
$ (end of string)
[] (match any of contents)
- (range if used between square brackets)
() (group, backreferenced group)
| (alternative, or)
\ (the escape character itself)

Используя регулярные выражения, можно искать всевозможные шаблоны в URL-адресах и переписывать их, когда они совпадают

Флаги

Флаги добавляются в конец правила перезаписи, чтобы сообщить Apache, как интерпретировать и обрабатывать правило. Они могут использоваться, чтобы сообщить apache рассматривать правило как нечувствительное к регистру, прекратить обработку правил, если текущий соответствует, или множество других параметров. Они разделены запятой и заключены в квадратные скобки. Вот список флагов с их значениями.

C (chained with next rule)
CO=cookie (set specified cookie)
E=var:value (set environment variable var to value)
F (forbidden - sends a 403 header to the user)
G (gone - no longer exists)
H=handler (set handler)
L (last - stop processing rules)
N (next - continue processing rules)
NC (case insensitive)
NE (do not escape special URL characters in output)
NS (ignore this rule if the request is a subrequest)
P (proxy - i.e., apache should grab the remote content specified in the substitution section and return it)
PT (pass through - use when processing URLs with additional handlers, e.g., mod_alias)
R (temporary redirect to new URL)
R=301 (permanent redirect to new URL)
QSA (append query string from request to substituted URL)
S=x (skip next x rules)
T=mime-type (force specified mime type)

Исключения и особые случаи

Условия перезаписи можно протестировать несколькими способами - их не нужно рассматривать как шаблоны регулярных выражений, хотя это наиболее распространенный способ их использования. Вот несколько способов переписать условия:

<Pattern (is test string lower than pattern)
>Pattern (is test string greater than pattern)
=Pattern (is test string equal to pattern)
-d (is test string a valid directory)
-f (is test string a valid file)
-s (is test string a valid file with size greater than zero)
-l (is test string a symbolic link)
-F (is test string a valid file, and accessible (via subrequest))
-U (is test string a valid URL, and accessible (via subrequest))

Надеюсь, это поможет вам :)

  • 1
    Привет Это уже работает с предложением изменений от Gorkem. Или ваш код еще лучше? RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^\.]+)$ $1.php [NC,L]
  • 0
    [NC, L] - «Флаги», которые сообщают Apache, как применять правило. В этом случае мы используем два флага. «NC» сообщает Apache, что это правило должно быть нечувствительным к регистру, а «L» указывает Apache не обрабатывать больше правил, если оно используется.
Показать ещё 1 комментарий
4

Добавьте этот код также, он позволит вам получить доступ к каталогам.

RewriteCond %{REQUEST_FILENAME} !-d

Ещё вопросы

Сообщество Overcoder
Наверх
Меню