Разрешение дополнительных переменных с переписыванием COND -- php поле с участием .htaccess поле с участием mod-rewrite пол Связанный проблема

Allowing optional variables with Rewrite Cond


1
vote

проблема

русский

У меня в настоящее время есть следующий код:

 <код> RewriteCond %{REQUEST_URI} !assets/ RewriteCond %{REQUEST_URI} !uploads/ RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+) index.php?method=$1&value=$2 [NC,L]   

Это отлично работает для перенаправления «Page / Home» на «index.php? Method = Page & AMP; Value = Home. Однако в некоторых точках мне нужно добавить дополнительную переменную или две в строку запросов, таких как «admin / userAccounts / mod / 2». Когда я просто прикрепляю биты до конца правила перезаписи, он работает, если все переменные «страница / Home / Rand / Rand» или «admin / userAccounts / mod / 2 ', но если что-то отсутствует, например,» Главная «Я получаю 404.

Что я делаю не так?

большое спасибо.

Английский оригинал

I currently have the following code:

RewriteCond %{REQUEST_URI} !assets/ RewriteCond %{REQUEST_URI} !uploads/ RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+) index.php?method=$1&value=$2 [NC,L] 

This works perfectly to redirect 'page/home' to 'index.php?method=page&value=home. However at some points I need to add an extra variable or two to the query string such as 'admin/useraccounts/mod/2'. When I simply tack on bits to the end of the rewrite rule it works if all the variables are 'page/home/rand/rand' or 'admin/useraccounts/mod/2', but if anything is missing such as 'page/home' I get a 404.

What am I doing wrong?

Many thanks.

</div
        
 
 

Список ответов

0
 
vote
vote
Лучший ответ
 

Это должно работать:

 <код> RewriteCond %{REQUEST_URI} !assets/ RewriteCond %{REQUEST_URI} !uploads/ RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(?:/([a-z|0-9_&;=-]+))?(?:/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$3&opt2=$4 [NC,L]   

(?:) не захватывает группу и? После того, как он делает его необязательным.

Я не уверен, если не захватывающие группы работают в MOD_REWRITE, если не использовать обычные группы, просто позаботьтесь использовать правильное число после $ при извлечении значений. Нравится здесь:

 <код> RewriteCond %{REQUEST_URI} !assets/ RewriteCond %{REQUEST_URI} !uploads/ RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(/([a-z|0-9_&;=-]+))?(/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$4&opt2=$6 [NC,L]   

Группы пронумерованы, как если бы вы были на номер, их открывающие скобки, находящиеся вправо, начиная с 1.

 

This should work:

RewriteCond %{REQUEST_URI} !assets/ RewriteCond %{REQUEST_URI} !uploads/ RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(?:/([a-z|0-9_&;=-]+))?(?:/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$3&opt2=$4 [NC,L] 

(?: ) is non capturing group and ? after it makes it optional.

I'm not sure if non capturing groups work in mod_rewrite, if not use normal groups, just take care to use right number after $ while extracting values. Like here:

RewriteCond %{REQUEST_URI} !assets/ RewriteCond %{REQUEST_URI} !uploads/ RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(/([a-z|0-9_&;=-]+))?(/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$4&opt2=$6 [NC,L] 

Groups are numbered as if you were to number their opening braces left to right starting from 1.

</div
 
 
 
 

Связанный проблема

6  Magento Получить цену, включая налог в файл нет шаблона  ( Magento get price including tax in a none template file ) 
На данный момент я пытаюсь получить цену продукта, включая налог в PHP-файле для моего продукта. У меня есть этот код в данный момент: <код> $_product = Mag...

0  Как я могу получить ответ JSON обратно (PHP)  ( How can i get json response back php ) 
Я сталкиваюсь с проблемой с ответом сервера. Моя цель состоит в том, чтобы отправить некоторые данные на сервер и получить некоторые ответы с учетом отправлен...

1  PHP: DateTime '-1 день'  ( Php datetime 1 day ) 
Я хочу получить дату вчерашнего дня текущей даты в часовом поясе SpeciFC. Я пробовал это, но это не работает: <код> LoopGenrtReport2 Я все еще получаю се...

1  Проблемы проектирования базы данных с отношениями  ( Database design issues with relationships ) 
Я работаю над обновлением для существующей базы данных, которая была разработана без какого-либо из кода для реализации рассматриваемой конструкции. Теперь я ...

-1  Как схватить значение флажки как целое число и не строку? [Дубликат]  ( How to grab checkbox value as integer and not string ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

2  Отправка файла в Google Drive  ( Submitting file to google drive ) 
Я пытался отправить файл в Google Drive. Хотя файл загружен на диск, я получаю ошибку после удара принять кнопку. <код> <?php require_once 'google-api-php-c...

0  Оптимизировать этот запрос на 1000000+ строк  ( Optimize this query for 1000000 rows ) 
Мне нужно потянуть данные и записывать его в файл CSV, но слишком много времени и слишком много времени. Что не так с этим и что я могу сделать? Кроме того, я...

0  Создание копии Symfony Project на сервере?  ( Making a copy of symfony project on server ) 
Я пытаюсь скопировать существующий проект Symfony в другой каталог, поэтому я могу проверить изменения, прежде чем применять их в живую версию. Я получаю ош...

0  Google Map не отображает  ( Google map not displaying ) 
У меня есть карта Google, которая используется здесь: http://www.comehike.com/outdoors/birds/birds.php Теперь я вижу сообщения об ошибках .j для 1) Инициа...

1  Иерархическая система комментариев в резьбовом режиме: php и mysql  ( Hierarchical commenting system in threaded view php and mysql ) 
У меня есть необходимость оказать резьбовое изображение 2-уровневых иерархических комментариев системы. Комментарии хранятся в базе данных. Информация о иерар...

1  Форма подписки Rapidmail перенаправляет после подписки электронной почты - MailChimp  ( Rapidmail subscription form redirect after email subscription mailchimp ) 
Я создаю веб-страницу, которая включает в себя очень простую форму подписки, в основном собирая адреса электронной почты, заинтересованные в продукте. Для это...

0  Mac Yosmite: Установите MacPorts Apache в качестве по умолчанию (Opt / local / apache2) на localhost, а не распределение OSX  ( Mac yosmite set macports apache as default opt local apache2 on localhost rat ) 
Я установил Apache через MACPPORTS, он работал нормально, но вдруг по какой-то причине он переключился на использование распределения OSX по умолчанию Apache,...

-2  PHP отображается только идентификатор, а не значение из MySQL [Закрыто]  ( Php only displaying id and not the value from mysql ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос нуждается в Детали или ясность . В настоящее...

0  Невозможно получить любые поля объявлений из API API Facebook (PHP v2.8.1)  ( Unable to fetch any adset fields from facebook ads api php v2 8 1 ) 
Я получаю поля Adaccount просто хорошо. Но все мои попытки получить адапты неудачей. Я пытаюсь получить идеи всех кампаний, бегущих под Adaccount. Но во-первы...

0  Композитор застрял на `Что-то изменилось, снова смотрел на все правила` Во время обновления laravel до 5,6  ( Composer stuck on somethings changed looking at all rules again while updati ) 
Я пытаюсь обновить мою приложение Laravel. Я был в 5.2, а теперь я в 5,5. Все работает нормально до здесь. Теперь я изменил его на <код> 5.6.* в моем файле...

Связанный проблема

6  Magento Получить цену, включая налог в файл нет шаблона 
0  Как я могу получить ответ JSON обратно (PHP) 
1  PHP: DateTime '-1 день' 
1  Проблемы проектирования базы данных с отношениями 
-1  Как схватить значение флажки как целое число и не строку? [Дубликат] 
2  Отправка файла в Google Drive 
0  Оптимизировать этот запрос на 1000000+ строк 
0  Создание копии Symfony Project на сервере? 
0  Google Map не отображает 
1  Иерархическая система комментариев в резьбовом режиме: php и mysql 
1  Форма подписки Rapidmail перенаправляет после подписки электронной почты - MailChimp 
0  Mac Yosmite: Установите MacPorts Apache в качестве по умолчанию (Opt / local / apache2) на localhost, а не распределение OSX 
-2  PHP отображается только идентификатор, а не значение из MySQL [Закрыто] 
0  Невозможно получить любые поля объявлений из API API Facebook (PHP v2.8.1) 
0  Композитор застрял на `Что-то изменилось, снова смотрел на все правила` Во время обновления laravel до 5,6