2015-03-13 4 views
0

У меня это в моем htaccess.Модификация переписать с двумя параметрами ignore last

RewriteRule ^author/([A-Za-z0-9-]+)/([0-9]+)/?$ author.php?authorslug=$1&page=$2 [NC,L] 

для моего URL работает только тогда, когда оба параметра присутствуют

example.com/author/name-x/1 

Однако если второй один нет

example.com/author/name-x 

он бросает 404.

Это также относится к моему htaccess.

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/(.*?)/?$ 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteRule ^(.*?)/?$ /$1.php [L] 

Как я могу заставить его работать, даже если второй параметр отсутствует?

+0

Группируйте то, что вы хотите по желанию в скобках, за которым следует знак вопроса: '^ author/([A-Za-z0-9 -] +) (/ ([0-9] +))? $' И изменить '$ 2'' '$ 3'. – bloodyKnuckles

ответ

0

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

RewriteRule ^author/([A-Za-z0-9-]+)(/([0-9]+))?$ author.php?authorslug=$1&page=$3 [NC,L] 

Теперь, когда есть 3 набора круглых скобок вы будете иметь 3 группы захвата и переменные. Наша группа «make optional» занимает второе место в последовательности скобок, поэтому она заполняет переменную захвата $2. И фактическое значение, которое вы хотите захватить, занимает третье место, поэтому это $3.

То, что у вас там, просто сделало заднюю косую черту опциональной /?.

Короче еще:

RewriteRule ^author/([^/]+)(/([0-9]+))?$ author.php?authorslug=$1&page=$3 [NC,L] 

Кроме того, я заметил, что нет слэши / в вашем примере, так что я взял его из регулярного выражения.

+0

Теперь я получаю ошибку sql? Точный же код, просто изменение, как вы упомянули выше. –

+0

Yay, это означает, что он работает. Теперь, чтобы выяснить, что в author.php бросает ошибку SQL. – bloodyKnuckles

+0

Не совсем :-) поскольку он по-прежнему работает с двумя параметрами, но теперь выдает ошибку sql с одним. –

Смежные вопросы