добавление хвостовой косой черты в Mod_rewrite и перенаправление непереходной косой черты в виртуальный каталог - PullRequest
0 голосов
/ 17 января 2012

КАК иногда случается, я создал то, что я бы назвал горячим беспорядком в моем файле htaccess. У меня есть несколько проблем, я знаю, что время от времени зацикливаюсь внутри, и в любом случае я не силен в этом. Я просмотрел десятки десятков SO вопросов и попробовал множество решений. Конечным результатом является то, что я пытаюсь собрать более одного отдельного решения проблемы, состоящей из нескольких частей, и я устроил настоящий беспорядок. Это было исключительно моей миссией в течение нескольких дней. Я застрял. Плохой.

  • Я хочу, чтобы mydomain.com/handmade-jewelry перешел на mydomain / handmade-jewelry / (примечание косая черта)
  • Тогда у меня также есть .com / handmade-jewelry / some-piece, идущий в jewelry-details.php? Id = some-piece. Это работает, но это также нуждается в конце.
  • Когда я пытаюсь показать косую черту в «/ some-piece /», он перенаправляется и попадает в файл, который не найден.

Поверь мне. Я знаю, что в моей логике должны быть явные недостатки, и я не стал задавать этот вопрос с субботы. Я знаю, что это супер-часто спрашивают. Я бы не стал спрашивать, не застрял ли я.

( rewrite all www and non-www requests to https:// ...works fine)
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
RewriteCond %{SERVER_PORT} ^80$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

(redirecting to the page with all the jewelry)
RewriteRule ^handmade-jewelry/$ jewelry-inventory-page.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
(following was a failed attempt.) 
# RewriteCond %{REQUEST_URI} !rock-jewelry/(.*)/$
(following works with no trailing slash, which is needed) 
RewriteRule ^handmade-jewelry/(.*)$ jewelry-details.php?s=$1 [L] 
(if I turn this on, it goes to a 404 looking for "handmade-jewelry/this-piece/index.php?s=thispiece/etc...")
# RewriteRule ^handmade-jewelry/(.*)?/$ jewelry-details.php?s=$1 [L]

Снова извините. Я знаю, что для многих из вас этот вопрос становится излишним.

1 Ответ

2 голосов
/ 17 января 2012

Попробуйте добавить следующее в ваш htaccess-файл в корневом каталоге вашего сайта

RewriteEngine on
RewriteBase /

#( rewrite all www and non-www requests to https:// ...works fine)
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

#I believe this is redundant because of the previous rule
RewriteCond %{SERVER_PORT} ^80$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

#if existing file or directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
#do nothing
RewriteRule ^ - [L]


#if it does not end with a slash e.g. handmade-jewelry, redirect to with slash
RewriteRule ^([-a-zA-Z0-9]+)$ /$1/ [L,R=301]

#if it does not end with a slash e.g. handmade-jewelry/some-piece, add the slash
RewriteRule ^([-a-zA-Z0-9]+/[-a-zA-Z0-9]+)$ /$1/ [L,R=301]

#(redirecting to the page with all the jewelry)
RewriteRule ^handmade-jewelry/$ jewelry-inventory-page.php [L,NC]

RewriteRule ^handmade-jewelry/([-a-zA-Z0-9]+)/$ jewelry-details.php?s=$1 [L,NC]
...