htaccess удалить index.php за исключением случаев, когда запрос содержит определенное слово - PullRequest
0 голосов
/ 27 июня 2018

У меня есть набор правил перезаписи, который удаляет index.php из URL-адреса, перераспределяет его и работает отлично. Однако я не могу заставить условие игнорировать правило, если строка содержит определенное слово для работы.

Так что в основном мне нужно переписать, когда URL-адрес http://domain.url/foo/bar, но НЕ когда он http://domain.url/shaz/foo/bar

# Remove 'index.php' from url
# 1) redirect the client from "/index.php/foo/bar" to "/foo/bar"
RewriteCond %{THE_REQUEST} /index\.php/(.+)\sHTTP [NC]
# ignore rule if
RewriteCond %{REQUEST_URI} !^shaz [NC]
RewriteCond %{THE_REQUEST} !^shaz  [NC]
# end ignore
RewriteRule ^ /%1 [NE,L,R]

# 2) internally map "/foo/bar" to "/index.php/foo/bar"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php/$1 [L]
# END 

Что я могу сделать, чтобы это работало правильно?

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете использовать эти правила в корне сайта .htaccess:

# Remove 'index.php' from url
# 1) redirect the client from "/index.php/foo/bar" to "/foo/bar"
RewriteCond %{THE_REQUEST} /index\.php/(?!shaz)(\S+)\sHTTP [NC]
RewriteRule ^ /%1 [NE,L,R]

# 2) internally map "/foo/bar" to "/index.php/foo/bar"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php/$1 [L]
# END 

(?!shaz) - это отрицательный прогноз, который пропускает совпадение, если shaz следует после /index.php/

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