Назад | Перейти на главную страницу

Apache - нужно переписать / связаться / с /contact.php

С помощью .htaccess от моего предыдущий вопрос, Я отредактировал его, чтобы добавить правило перезаписи для перезаписи /contact/ к /contact.php и /xyz/contact/ к /contact.php?lang=xyz. В то время как второй работает, первый все еще ищет фактический каталог, который не существует, возвращая 404 код. Оба перенаправления на хороший вариант URL работают, как и ожидалось. Вот мой .htaccess настройки для этого:

# No directory listing, no multi views, follow symlinks
Options -Indexes -MultiViews +FollowSymLinks

# Redirects and rewrites allowed
RewriteEngine on

# ...

# Redirect direct requests for "contact.php?lang=xyz" to "/xyz/contact/"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^lang=([a-z]{2,3})$
RewriteRule ^contact\.php$ /%1/contact/? [R=301,L]

# Redirect direct request for "contact.php" to "/contact/"
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^contact\.php$ /contact/? [R=301,L]

# Internally rewrite "/xyz/contact/" to "/contact.php?lang=xyz"
RewriteRule ^([a-z]{2,3})/contact/?$ /contact.php?lang=$1 [L]

# ...

# Internally rewrite "/contact/" to "/contact.php"
RewriteRule ^/contact/?$ /contact.php [L]
# Internally rewrite "/contact/" to "/contact.php"
RewriteRule ^/contact/?$ /contact.php [L]

В каталоге .htaccess файлы, вам необходимо удалить префикс косой черты на RewriteRule шаблон (как вы это делали в предыдущих директивах). Это должно быть записано так:

RewriteRule ^contact/?$ /contact.php [L]

Это соответствует запросам на /contact и /contact/.

Префикс косой черты не используется на RewriteRule шаблон потому что в .htaccess контекст, префикс каталога (который, в частности, заканчивается косой чертой) сначала удаляется из URL-пути, который RewriteRule шаблон матчи против. (The префикс каталога путь к файловой системе, где .htaccess файл находится.)