RewriteRule путаница: шаблон также соответствует существующему имени каталога - PullRequest
1 голос
/ 27 декабря 2011

Я попытался перенаправить http://domain.com/user/foobar на http://domain.com/user/index.php?id=foobar, используя следующий код в .htaccess:

RewriteEngine On
RewriteBase /data
RewriteRule ^user/(.*)$ user/index.php?id=$1

Но по некоторым причинам только index.php (не foobar ) возвращается в скрипт как ID.

Я думаю, что mod_rewrite запутывается из-за того, что имя существующей папки также соответствует шаблону регулярных выражений.Однако он работает после переименования папки в _user и, соответственно, изменения вышеуказанного кода.

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

Убедитесь, что правило перезаписи в вашем .htaccess применяется несколько раз:

0: http://domain.com/data/user/foobar
1: /data/user/foobar -> /data/user/index.php?id=foobar
2: /data/user/index.php?id=foobar -> /data/user/index.php?id=index.php

Поэтому оно всегда заменяет ваш параметр id на index.php.

. Вам нужнов записать условие , что если index.php уже запрошено, оно не будет переписано, например, путем проверки, существует ли файл:

RewriteEngine On
RewriteBase /data

# the following condition applies to the next rule
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^user/(.*)$ user/index.php?id=$
1 голос
/ 27 декабря 2011

Попробуйте

RewriteEngine On
RewriteBase /data

#if not index.php
RewriteCond %{REQUEST_URI} !index\.php$ [NC]
RewriteRule ^user/(.*)$ user/index.php?id=$1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...