Исапи переписать помощь - PullRequest
0 голосов
/ 07 июля 2011

Привет, у меня есть следующее правило переписывания isapi, работающее на IIS 6.

оно переписывает:

http://www.mysite.com/index.php?category=white-wine

в:

http://www.mysite.com/white-wine

.Содержание htaccess:

RewriteEngine on
RewriteBase / 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/?$ /?category=$1 [NC,QSA,L]

Сейчас я пытаюсь выполнить почти то же правило, но в более глубокой папке. edit Правило находится в том же файле .htaccess в корне сайта, что я просто хочу применить вышеупомянутое правило, к файлу index.php, который находится в папке в корне, называемой products.

Я хочу переписать:

http://www.mysite.com/product/index.php?product=the-chosen-product 

в:

http://www.mysite.com/product/the-chosen-product

Я пробовал это:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/product/?$ /product/?product=$1 [NC,QSA,L]

Это не работает, хотяЯ получаю кучу ошибок на своей странице php:

Warning: require_once() [function.require-once]: URL file-access is disabled in the server configuration

Warning: require_once(http://www.mysite.com/myfolder/framework/library.php) [function.require-once]: failed to open stream: no suitable wrapper could be found

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

Кроме того, как бы я изменил его, чтобы вместо отображения:

http://www.mysite.com/product/my-chosen-product 

было бы показано:

http://www.mysite.com/product/my-chosen-product.htm

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

1 Ответ

1 голос
/ 08 июля 2011

RE:"Предупреждение: require_once () [function.require-Once]: доступ к файлу URL отключен ...".

Не использовать require_once(http://www.mysite.com/myfolder/framework/library.php) -это запрещено на вашем сервере (но даже если оно будет включено - делать это не рекомендуется).Вместо этого используйте require_once($_SERVER['DOCUMENT_ROOT'] . '/myfolder/framework/library.php').


RE: Правило перезаписи (для продуктов).Используйте это вместо:

RewriteCond ${REQUEST_URI} !^/product/index\.php
RewriteRule ^product/([^/]+)/?$ /product/index.php?product=$1 [NC,QSA,L]

Таким образом, весь ваш .htaccess должен выглядеть следующим образом:

RewriteEngine on
RewriteBase / 

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

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

Я внес небольшие изменения в ваши правила: сразу указали index.php, в противном случаеIIS должен был бы выяснить правильное имя сценария позже ... для этого требуются крошечные, но все еще ресурсы.


Эти правила будут работать с URL-адресами без расширений (например, http://www.mysite.com/product/the-chosen-product).Если вы хотите иметь расширения .htm в таких URL-адресах, вам нужно сделать:

a) Сгенерировать эти URL-адреса в вашем приложении сразу

b) Немного изменить правила перезаписи: заменить строки RewriteRuleс такими:

RewriteRule ^([^/]+)\.htm$ /index.php?category=$1 [NC,QSA,L]
RewriteRule ^product/([^/]+)\.htm$ /product/index.php?product=$1 [NC,QSA,L]

С такими изменениями старые URL без расширения (без .htm) больше не будут работать.

...