Chciałbym przekierować dowolne żądanie zawierające podkreślenia do tego samego adresu URL, ale z łącznikami zastępującymi adresy URL. Widziałem wiele forów sugerują zrobić coś takiego:W htaccess chciałbym zastąpić podkreślenia myślnikami, a następnie przekierować użytkownika do nowego adresu URL.
(Powtarzanie zwiększany wersję tego RewriteRule aż do gazillion)
rewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ http://example.com/$1-$2-$3-$4 [R=301,L]
rewriteRule ^([^_]*)_([^_]*)_(.*)$ http://example.com/$1-$2-$3 [R=301,L]
rewriteRule ^([^_]*)_(.*)$ http://example.com/$1-$2 [R=301,L]
Moje obecne rozwiązanie w PHP (które działa prawidłowo) :
if(preg_match('/[_]+/', $_SERVER['REQUEST_URI'])){
$redirectUrl = preg_replace('/[_]+/','-', $_SERVER['REQUEST_URI']);
header('Location: '. $redirectUrl , TRUE, 301);
return;
}
Ale Wolałbym nie używać php & zamiast trzymać go w moim pliku .htaccess bez konieczności powtarzania tej pierwszej RewriteRule w kółko, aby przewidzieć, ile podkreśla każdy adres URL może być. Myśli? Czy jest taki sposób, aby to zrobić bez powtarzania zwiększonego przepisu ponownego zapisu?
----- edit -----
Mój obecny plik .htaccess jest po prostu średnia WordPress jeden, który znajduje się poniżej:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Jest to jedyny sposób, w jaki zobacz, jak działa, nie masz Zastępów w przepisywaniu mod, tylko przepisywanie reguł z dopasowanymi wzorami. –