.htaccess Проверяет, не запрашивает ли клиент index.php

#php #.htaccess

#php #.htaccess

Вопрос:

Я столкнулся с проблемой при создании моей контактной формы. Мой файл .htaccess работает для таких URL-адресов, как:

 ex.com/a -> ex.com/a.php
ex.com/b -> ex.com/b.php
...
 

Но когда я это делаю ex.com , это вызывает ошибку 500.

Проблема, которую я обнаружил, заключается в том, что вывод .htaccess для этого ex.com/.php . Но я не знаю, как я могу это исправить. Это содержимое моего файла .htaccess:

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

Спасибо за помощь в advantage.

Правка 1

Я попытался добавить следующие условия

 - RewriteCond %{REQUEST_FILENAME}index.php -f
- RewriteCond %{REQUEST_FILENAME} index.php -f
- RewriteCond %{REQUEST_FILENAME}index.php -f

 

По-прежнему возникает ошибка.

Комментарии:

1. Вы пробовали RewriteCond %{REQUEST_FILENAME} ^$ и RewriteRule ^$ index.php [L] ? Кроме того, проверьте файлы журналов вашего сервера.

2. ваш mod_rewrite действительно включен? проверьте ini_set(‘display_errors’, 1); что журнал в вашем apache или php выдает в сообщениях об ошибках.

3. @kmoser похоже, это работает для index.php , но теперь ссылки, подобные ex.com/a не работают

4. @ChristianFelix Если mod_rewrite не включен, то как ссылки, подобные ex.com/a будет работать

5. @LambdaTheDev «Не работают», что означает?

Ответ №1:

После некоторых попыток и дополнительных исследований я нашел этот шаблон, который определяет, является ли строка пустой:

 ^s*$
 

Затем я взял свой файл .htaccess и добавил следующее условие:

 RewriteCond %{REQUEST_FILENAME} !^s*$
 

Он проверяет, не является ли имя файла запроса пустым. И, конечно, если он пуст, он отменяет перезапись.

Настолько переполнен .файл htaccess теперь:

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

Когда я делаю запрос http://ex.com/a , он показывает мне http://ex.com/a.php . Но если мой запрос — это просто a http://ex.com , то он отображает мне содержимое index.php досье.