Удалить конечный номер из URL через.htaccess

Я добавил это правило

RewriteRule ^(.*)-[0-9]+/$ /$1/ [L,QSA] 

удалить конечный номер, которому предшествует дефис из URL на сайте WordPress

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteRule ^(.*)-[0-9]+/$ /$1/ [L,QSA]
</IfModule>

Но, похоже, это не сработало, мне кажется, что регулярное выражение в порядке, но я предполагаю, что оно противоречит другим правилам.

2 ответа

Решение

Вы можете попробовать это:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# Additional 2 lines to remove the trailing -Number from the URL
RewriteCond %{REQUEST_URI}  ^/(.*)-(?:[0-9]*)?/?$    [NC]
RewriteRule .*   %1        [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php   [L]
</IfModule>

2 дополнительные линии перенаправляются навсегда

http://example.com/any/number/of/folders/anything-NUMBER

Для того, чтобы:

http://example.com/any/number/of/folders/anything

-NUMBER комбинация должна быть завершающей строкой в ​​URL, с или без завершающей косой черты.

Дефис - удаляется всегда, даже когда номера нет. Если вы хотите сохранить его, замените

RewriteRule .* %1 [R=301,L] с

RewriteRule .* %1- [R=301,L]

Постоянное перенаправление используется для отображения URL замещения в адресной строке браузера. Для тихого картирования удалите R=301 из [R=301,L].

RedirectMatch 301 ^(.*)-[0-9]+/?$ $1/

Другие вопросы по тегам