У меня есть файл.htaccess, в котором я пытаюсь перенаправить запросы на
/something/
в
/something
... после чего должно выполняться второе правило, которое поворачивается
/something
...в
/index.php?foo=something
Здесь мой.htaccess:
RewriteEngine on
#rule 1 - disallow trailing slash
RewriteRule ^([a-z\-]+)\/$ $1
#rule 2 - main redirect
RewriteCond %{REQUEST_URI} !(inc/) [NC]
RewriteRule ^[a-z\-]+$ index.php?foo=$0
Оба правила вступают в силу правильно, но перенаправление в первом правиле переходит к 404, и я не понимаю, почему. Правильный поток должен быть:
Любая идея, что я делаю неправильно?
Вам нужен флаг R
для перенаправления:
DirectorySlash Off
RewriteEngine on
#rule 1 - disallow trailing slash
RewriteRule ^([a-z\-]+)\/$ $1 [L,R]
#rule 2 - main redirect
RewriteCond %{REQUEST_URI} !(inc/) [NC]
RewriteRule ^[a-z\-]+$ index.php?foo=$0
Кроме того, вам может потребоваться отключить DirectorySlash
, потому что mod_dir автоматически добавит конечные косые черты в директивы. Если вы не отключите это, это может вызвать цикл перенаправления.
Кроме того, вам может также понадобиться директива RewriteBase
если эти правила находятся в файле htaccess, который не находится в вашем корневом каталоге документа.
RewriteBase /
для корневого документа, но в вашем вопросе у вас есть URL-адреса, которые выглядят как http://localhost/mysite/something/
и если правила находятся в /mysite/
вам нужно:
RewriteBase /mysite/
http://localhost/c:/xampp...