apache — Как удалить и перенаправить .php для поддоменов в .htaccess?

У меня есть следующие коды, чтобы удалить расширение .php и перенаправить URL без суффикса в нужный файл

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://www.example.com/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]

У меня также есть следующие коды для перенаправления m.example.com на www.example.com/m/

#mobile
RewriteCond %{HTTP_HOST} ^m\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/m(/|$) [NC]
RewriteRule ^(.*)$ m/$1 [L]

У меня вопрос, как мне сделать то же самое для файлов в папке m, чтобы

  1. когда люди вводят m.example.com/test, он переходит на m.example.com/test.php
  2. когда люди переходят на m.example.com/test.php, файл будет показан, но тогда URL будет изменен на m.example.com/test?

Спасибо.

1

Решение

Объедините свои правила и удалите http://www.example.com/ от цели правила перенаправления:

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1%2 [R=302,L,NE]

#mobile
RewriteCond %{HTTP_HOST} ^m\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/m(/|$) [NC]
RewriteRule ^(.*)$ m/$1 [L]

# Resolve .php file for extension-less php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]