Как применить правила mod_rewrite к файлам в каталоге? - PullRequest
2 голосов
/ 09 июня 2019

Я пытаюсь применить условия перезаписи в моем файле htaccess ко всем страницам, содержащимся в определенном каталоге на моем веб-сайте, но не к самому индексу каталога.

В конечном счете, я пытаюсь удалить расширение .php со страниц в определенном каталоге.

Что у меня сейчас есть:

https://www.example.com/directory/page-1.php

Конечный результат, которого я пытаюсь достичь:

https://www.example.com/directory/page-1

Кроме того, если пользователь пытается посетить версию страницы .php, он 301 перенаправляет на новую версию без расширения файла .php.

Пример совпадения:

https://www.example.com/directory/page-1.php
https://www.example.com/directory/page-2.php

Не должно совпадать:

https://www.example.com/directory/

Вот что у меня есть:

RewriteCond %{REQUEST_URI} \/directory\/[^\s]+$

Как следует писать RewriteRule?

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Вы можете использовать следующее правило в htaccess в subfolder, если оно еще не создано:

 RewriteEngine on
 #rule for /subfolder/htaccess 
#redirect /subfolder/file.php to /file
#The condition bellow prevents infinite loop/Too many redirects  error
RewriteCond %{ENV_REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php$ /subfolder/$1 [L,R]
#internally map /subfolder/file to /subfolder/file.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)/?$ /subfolder/$1.php [L]

Если вы хотите вместо этого использовать корневой htaccess-файл, добавьте следующее содержимое:

 RewriteEngine on
 #rule for root/.htaccess 
#redirect /subfolder/file.php to /file
#The condition bellow prevents infinite loop/Too many redirects  error
RewriteCond %{ENV_REDIRECT_STATUS} ^$
RewriteRule ^subfolder/(.+)\.php$ /subfolder/$1 [L,R]
#internally map /subfolder/file to /subfolder/file.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^subfolder/(.+)/?$ /subfolder/$1.php [L]
0 голосов
/ 09 июня 2019

Выражение, которое может помочь нам найти RewriteRule, может выглядеть следующим образом:

^https?:\/\/(www\.)?example\.com\/directory\/[^\s]+\.php$

, что приведет к сбою наших нежелательных URL и передаче желаемых.

Демо

Наш RewriteRule может выглядеть так:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} (.*\/directory\/)([^\s]+)\.php [NC]
    RewriteRule (.*directory\/)([^\s]+)\.php   $1$2 [L,R=301]
</IfModule>

Демо

Тест RewriteRule

Вы можете проверить свои правила перезаписи в htaccess.madewithlove.be .

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

Мы также можем захотеть очистить кэш браузера каждый раз, когда мы меняем наш файл htaccess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...