.htaccess mod_rewrite при выдаче нескольких файлов PHP - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь украсить URL для SEO от http://example.net/dashboard.php?action=news до http://example.net/news И он работает с этим кодом

RewriteEngine On
RewriteCond %{THE_REQUEST} \/+dashboard\.php\?([^\&]+) [NC]
RewriteRule ^ %1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ dashboard.php?action=$1 [L,QSA]

Но я хочу отредактировать больше PHP файлов, например, http://example.net/user.php?action=profile до http://example.net/profile

Если я снова использую этот код в том же файле .htaccess

RewriteEngine On
RewriteCond %{THE_REQUEST} \/+user\.php\?([^\&]+) [NC]
RewriteRule ^ %1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ user.php?action=$1 [L,QSA]

Это не будет работать, только приборная панель. php Один работает правильно. Не могли бы вы помочь мне с этим?

Заранее спасибо.

1 Ответ

0 голосов
/ 14 марта 2020

Ваши текущие Rewriterules являются общими.

[^/]+

соответствует всему, у которого нет "/", иначе это соответствует всему. Итак, в основном ваше первое правило

RewriteRule ^([^/]+)/?$ dashboard.php?action=$1 [L,QSA]

соответствует каждому. profile / всегда будет перенаправлен на панель управления. php? acton = profile.

Ваш .htaccess должен выглядеть следующим образом:

RewriteEngine On
RewriteCond %{THE_REQUEST} \/+dashboard\.php\?([^\&]+) [NC]
RewriteRule ^ %1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(news)/?$ dashboard.php?action=$1 [L,QSA]

RewriteCond %{THE_REQUEST} \/+user\.php\?([^\&]+) [NC]
RewriteRule ^ %1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(profile)/?$ user.php?action=$1 [L,QSA]

Как видите, я переключился

[^/]+

с более явным регулярным выражением.

...