htaccess переписать - PullRequest
       25

htaccess переписать

0 голосов
/ 05 июля 2010

Я хотел бы переписать /anything.anyextension в /?post=anything.

например:

  • /this-is-a-post.php в /?post=this-is-a-post или
  • /this-is-a-post.html в /?post=this-is-a-post или даже
  • /this-is-a-post/ в /?post=this-is-a-post

Я пытался

RewriteRule ^([a-zA-Z0-9_-]+)(|/|\.[a-z]{3,4})$ ?$1 [L]

но это не работает.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 05 июля 2010

Вам нужен лучший способ определить, когда применять правило перезаписи, иначе ваша страница не сможет отображать внешние JS или CSS, если вы не определите исключение.

SilverStripe (или ядро ​​Sapphire) предлагает хороший подход к этому, что-то вроде:

RewriteEngine On
RewriteCond %{REQUEST_URI} !(\.css)|(\.js)|(\.swf)$ [NC]
RewriteCond %{REQUEST_URI} .+
RewriteRule ^([^\.]+) /?post=$1 [L,R=301]

Для этого требуется, чтобы URI не был пустым, не был JS, CSS или SWF, и перенаправлял обратно в корневой каталог:

http://localhost/this-is-a-post.php
http://localhost/?post=this-is-a-post

Если вы не хотите перенаправление, а обработку, удалите правило перенаправления R=301

0 голосов
/ 05 июля 2010

Если у вас есть доступ к конфигурации основного сервера, используйте это:

RewriteRule ^/(.+)\.\w+$ /?post=\1 [L]

Если нет, и вы вынуждены поместить это в .htaccess файл, вы можете попробовать

RewriteRule ^(.+)\.\w+$ /?post=\1 [L]

В любом случае это предполагает, что вы будете переписывать URL-адреса только с одним компонентом пути (т. Е. Если вы получите запрос, подобный /path/anything.anyextension, он может работать не так, как вы ожидаете, то правило обработки необходимо будет изменить, чтобы обработать этот запрос). )

...