проблемы с htaccess и общие регулярные выражения - PullRequest
1 голос
/ 30 мая 2011

У меня проблемы с перезаписью htaccess.

строка:

RewriteRule ^sports/([^/\]+)/?([^/\]+)/?([^/\.]+)/?$ index.php?v=sports&title=$1&go=$2&d=$3 [L]

для этого URL: http://localhost/host/sports/other/ -> это приведет к:

***object(url)[3]
  public 'v' => string 'sports' (length=6)
  public 'title' => string 'other' (length=5)*** ( these are the var_dump of Gets);

пока для этого URL, все нормально, НО для этого URL: http://localhost/host/sports/baseball/aliasss/ получится: 404 не найдено, мне нужно изменить регулярное выражение и добавить '.' так:

RewriteRule ^sports/([^/\]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?v=sports&title=$1&go=$2&d=$3 [L]

тогда все работает нормально. но если я сохраню точку и проверим старый URL-адрес только с двумя папками, то получится следующее:

object(url)[3]
  public 'v' => string 'sports' (length=6)
  public 'title' => string 'basebal' (length=7)
  public 'go' => string 'l' (length=1)

если вы видите ссылку: /sports/basebal/l вместо /sports/baseball, в запросе отсутствует 1 буква, ПОМОГИТЕ! спасибо:)


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

RewriteRule ^sports/([^/\]+)/?([^/\.]+)/?$ index.php?v=sports&title=$1 [L]
RewriteRule ^sports/([^/\]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?v=sports&title=$1&go=$2&d=$3 [L]

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

1 Ответ

1 голос
/ 31 мая 2011

в вашем случае, я думаю, я бы использовал это:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^sport/(.*?)/(.*?)/(.*?)/$ test.php?v=sport&a=$1&b=$2&c=$3

, но обычно я предпочитаю

RewriteRule (.*) index.php?get=$1

, а затем анализирую все URL с помощью php

в вашем коде вы делаете несколько ошибок, таких как [^/\]+ .... обычно вы должны избегать прямой косой черты с обратной, как я упоминал выше,

в данном случае [^\/.]+ вы не делаетенужна точка, потому что выражение [^\/] соответствует всему, кроме косой черты

, вам не нужно /? (необязательные косые черты), потому что текст между ними не является обязательным, и вы, вероятно, получите целоеurl как $1 .... может быть, просто последний полезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...