У меня есть следующий код в моем файле .htaccess:тщеславие URL-адрес и скрипты расширений файлов интерферирующего вместе
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase/
#vanity URL
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9-_]*)$ /profile.php?username=$1 [L,QSA]
RewriteCond %{THE_REQUEST} \ /profile\.php\?username=([^&\ ]+)&?([^\ ]*)
RewriteRule^/%1?%2 [L,R=301]
#remove file extensions
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
ErrorDocument 400 /404.php
ErrorDocument 401 /404.php
ErrorDocument 403 /404.php
ErrorDocument 404 /404.php
ErrorDocument 500 /404.php
<Files .htaccess>
order allow,deny
deny from all
</Files>
Что касается тщеславия адресов, он отлично работает, но когда дело доходит до удаления PHP расширений в то конец URL-адресов, не работает:
1. если я вхожу mysite.com/home.php
, я попадаю в home.php
но расширение до сих пор существует в адресной строке.
2. если я вхожу mysite.com/home
, я попадаю в моей пользовательской странице ошибки, потому что home
не имя пользователя моя база данных.
Как я могу исправить 1. и 2.?
+1 для этого хорошего объяснения! Я собираюсь блокировать имена пользователей, например, о настройках и т. Д., Поэтому мне не нужен префикс. Ваш код, похоже, работает для страниц, но он не работает с моими файлами действий: мои формы больше не отправляются. если home.php имеет форму с файлом действия формы «signup.php», я перенаправляюсь на mysite.com/signup, а затем ничего. Любые идеи почему? –
Возможно, было бы проще удалить расширения файлов только для некоторых указанных URL-адресов, таких как: home.php и account.php. Возможно ли это с помощью htaccess? –
@ChHr в первом правиле '(. *)' Должно быть '(home | account)', а второе правило '([^ \.] +)' Должно быть '(home | account) '. –