оптимизировать красивые URL в .htaccess - PullRequest
0 голосов
/ 08 января 2010

Это код, который я использую,

<IfModule mod_rewrite.c>
 RewriteCond %{SCRIPT_FILENAME} !-d
 RewriteCond %{SCRIPT_FILENAME} !-f
 RewriteRule ^([^/]+)/?([^/]+) index.php?user=$1&do=$2 [L]
</IfModule>

если я дам ему abcd/1234, сначала будет записано abcd, затем 1234 в качестве второй переменной. Но если URL был abcd/ или abcd, то первый захват остается прежним, а второй захват становится d. Это не вызовет никаких проблем в самом коде php, но будет более эффективным, если он не был захвачен в первую очередь.

о, чтобы уточнить, ни первый, ни второй захват не требуются для страницы index.php. Но изменит свое назначение, если они существуют.

любая помощь с кодом регулярного выражения была бы признательна, и если есть какие-либо способы улучшить ее или написать более эффективно, я был бы очень рад узнать!

Большое спасибо:)
я использую этот инструмент http://gskinner.com/RegExr/, чтобы проверить это.

Ответы [ 3 ]

1 голос
/ 08 января 2010

Вторая часть ($ 2) не является обязательной, поскольку вы написали [^/]+. Я бы заменил все это на ^([^/]+)(?:/([^/]+))?, что приводит к следующим результатам:

abcd -> $ 1 = 'abcd' $ 2 = ''

abcd / -> $ 1 = 'abcd' $ 2 = ''

abcd / что-то -> $ 1 = 'abcd' $ 2 = 'что-то'

0 голосов
/ 08 января 2010

Очень простая модификация:

 ^([^/]+)/?([^/]*)
0 голосов
/ 08 января 2010

Знак вопроса в правиле вместе со вторым знаком плюс приводит к его разделению таким образом. Вы должны удалить знак вопроса, поскольку вам уже требуется хотя бы один символ во второй группе.

Edit: В этом случае используйте это:

RewriteRule ^([^/]+)(/([^/]+))?$ index.php?user=$1&do=$3 [L]
...