Мод-переписать Trailing Slash Issue - PullRequest
5 голосов
/ 24 ноября 2008

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

У меня есть это правило перезаписи

RewriteEngine On
RewriteBase /bookkeepers/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/?$ index.php?franchise=$1

Что меняет этот URL

http://example.com/location/kings-lynn

В этот

http://example.com/location/index.php?franchise=kings-lynn

Проблема, с которой я столкнулся, заключается в том, что если я добавлю косую черту

http://example.com/location/kings-lynn/

тогда строка запроса возвращается как

franchise=kings-lynn/

и по какой-то причине ни один из моих файлов CSS и Javascript не загружается.

Есть идеи?

Ответы [ 2 ]

10 голосов
/ 24 ноября 2008

Как сказал Пол Томблин, + жаден; то есть он соответствует столько, сколько может.

^(.+[^/])/?$ говорит ему, чтобы оно совпадало с чем угодно, за которым следует символ, который не является /, а затем необязательный /. Это имеет эффект не захвата трейлинг / .

Наиболее вероятная причина, по которой ваши CSS и Javascript не работают, это то, что вы используете относительный путь, например, src = "my.js". Когда есть косая черта, он выглядит как каталог, поэтому ваш браузер будет искать /location/kings-lynn/my.js. Вы можете исправить это, просто используя абсолютный путь к вашим файлам (например, /location/my.js).

6 голосов
/ 24 ноября 2008

Похоже, что (. +) Соответствует жадности. В этом случае вы можете попробовать

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

Это гарантирует, что первая группа (в скобках) не заканчивается косой чертой.

...