Мод переписать - простой вопрос - PullRequest
0 голосов
/ 13 мая 2009

Это мой текущий .htaccess

Options +FollowSymLinks
DirectoryIndex index.php

RewriteEngine On
RewriteBase /product/

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php$ ./$1/ [R=301,L]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L]

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

Теперь все работает нормально ..

  • / product / contact вернуться к / product / contact /
  • / product / contact.php вернуться в / product / contact /

Вопрос ..

  • Как сделать все мои .php будет / contact / / help / / faq /
  • Теперь я должен добавить contact.php help.php faq.php в htaccess
  • Я пытался добавить RewriteRule ^ (. *) / $ $ 1.php [QSA, L], но это будет возвратный цикл.

Дайте мне знать, как это исправить;)

Ответы [ 2 ]

0 голосов
/ 13 мая 2009

К сожалению, сделать это в ваших операторах перезаписи будет бесконечный цикл, поскольку Apache будет пытаться переписать help/ в help.php, а затем help.php в help/ и т. Д.

Если это действительно необходимо, сделайте это в своем приложении (пример в PHP):

<?php 
// The (\?.*)? so it "ignores" query strings
if (preg_match('/\.php(\?.*)?$/', $_SERVER['REQUEST_URI'])) {
  header('Location: ' . str_replace('.php', '/', $_SERVER['REQUEST_URI']));
  exit;
}
0 голосов
/ 13 мая 2009

Возможно ли, что эта линия обратная?

RewriteRule ^(.*)/$ $1.php [L,QSA]

Насколько я понимаю, это переписывает domain.com/product/help/ в domain.com/product/help.php. Попробуйте

RewriteRule ^(.*).php $1/ [L,QSA]

Это должно переписать domain.com/product/help.php на domain.com/product/help/ и domain.com/foobar/baz.php to domain.com/foobar/baz/ и т.д.

...