htaccess RewriteRule проблема - PullRequest
       5

htaccess RewriteRule проблема

1 голос
/ 07 августа 2010

У меня проблема с RewriteRules.

В настоящее время я использую это правило:

RewriteRule ^([^/.]+)/?$ index.php?clip=$1

Это отлично работает для ссылок, таких как *, где $_GET['clip'] - значение послекосая черта:

http://example.com/abcdefg

Но не для тех, у кого есть символ точки, например:

http://example.com/abcdefg.png

Как мне изменить RewriteRuleзаставить это работать для таких ссылок?

Ответы [ 3 ]

1 голос
/ 07 августа 2010

попробуйте этот код:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?clip=$1

Это предотвратит игнорирование файлов, которые действительно находятся на вашем сервере. так что http://example.com/abcdefg.png будет работать, пока существует /abcdefg.png.

Кроме того, регулярное выражение, которое вы использовали в правиле перезаписи, должно быть слегка изменено, я удалил ., как вы его предотвращали.

1 голос
/ 07 августа 2010
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?clip=$1

я бы не советовал эту технику, потому что это приведет к дополнительному чтению с диска, чтобы проверить, есть ли файл там ... если у вас есть такая возможность, я бы посоветовал организовать структуру каталогов таким образом, чтобы apache мог определить из каталога, что делать. пример из моей структуры:

  # skip whitelisted directories
  RewriteRule ^(test|skin|stylesheets|images|javascripts|favicon|robots\.txt|index\.php) - [L]
  RewriteRule ([-_\w\/]*) index.php?p=$1 [NE,NC,QSA]
0 голосов
/ 07 августа 2010

Вы подходите для любой строки, которая не содержит "/" или ".".Если вы хотите, чтобы совпадение включало расширение, вы можете использовать:

RewriteRule ^([^/]+)/?$

Если вас это не волнует:

RewriteRule ^([^/.]+)
...