Чтобы заменить несколько произвольно размещенных экземпляров шаблона /ddd-XXX
в пути URL-адреса, Apache необходимо заменять каждое вхождение по одному, а затем рекурсивно перенаправлять URL-адрес после каждой замены.Но чтобы сделать это правильно, вам нужно добавить оператор RewriteBase
в файл .htaccess
и задать для него путь, содержащий файл .htaccess
.
Вот проверенный .htaccess
файл, который делает то, что вы ищете:
<IfModule mod_rewrite.c>
RewriteEngine on
# Set RewriteBase to the URL-path containing this .htaccess file:
RewriteBase /apache
# Redirect first "/ddd-XXX" path segment to: "/XXX":
RewriteRule ^((?:(?!\d+-)[^/]+/)*)\d+-(.*)$ $1$2 [R=301,L]
# Rewrite the resulting URL path to show.php as a query string
# (if resulting URL-path is NOT a real file or a directory).
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ show.php?path=$1
</IfModule>
В моей тестовой системе этот файл .htaccess
находится в каталоге /apache
(это то, что я установил для RewriteBase
).Обратите внимание, что окончательный путь к перенаправленному URL не может быть реальным файлом!В приведенном выше файле .htaccess
у меня есть дополнительное правило, которое обрабатывает окончательный перенаправленный URL-адрес (который не указывает на реальный файл) и передает этот путь в качестве переменной запроса в сценарий show.php
.