2015-05-24 5 views
0

В настоящее время я работаю над проектом, основанным на самодельном CMS, и у меня возникают некоторые проблемы с переписыванием URL.RewriteRule для нескольких параметров

Вот что: весь сайт централизован вокруг index.php, который находится в основном каталоге. В зависимости от того, что он получает подумал URL, то index.php отображает правильную страницу (страницы включены от ИНК/страницы/папки)

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} (.+)/$ 
RewriteRule^%1 [L,R=301] 
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page=$1 [NC] 

Для одного параметра, он прекрасно работает. http://demo.com/subscribe/ или demo.com/subscribe передает индекс $ _GET ['page'] в индекс.

Для некоторых страниц мне нужен второй параметр. Поэтому это не требуется для каждой отдельной страницы. За пример, http://demo.com/edit/I-love-Stackoverflow должен передать $ _GET [ 'snd_param')

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} (.+)/$ 
RewriteRule^%1 [L,R=301] 
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ index.php?page=$1&snd_param=$2 [NC] 

Я попробовал это, но это не работает хорошо. Во-первых, если второй параметр не указан (demo.com/edit), он не работает. Индекс не получает права $ _GET ['page']. Во-вторых, когда упоминается второй параметр, он «работает», но apache считает, что это каталог. Затем моя индексная страница находится в фиктивной папке «I-love-Stackoverflow» и загружается CSS, изображения и javascript.

Надеюсь, я подробно объяснил свою проблему! Заранее спасибо за помощь

ответ

0

Вы должны относиться к правилам отдельно. Все условия, предшествующие правилам, применяются только к одному правилу, поэтому в основном второй RewriteRule не выполняется вообще.

Вы можете использовать что-то вроде этого:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ index.php?page=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&snd_param=$2 [L] 

Моя страница индекс затем находится в фиктивном "I-Love-Stackoverflow" папки и загрузки CSS, изображения и Javascript не удается.

Вы, вероятно, загрузить свои активы, используя относительные пути, так что браузер знает только для немодифицированной URL (http://demo.com/edit/I-love-Stackoverflow) в вашем случае, и неправильные адреса создаются при загрузке браузера активов. Если вы загружаете ресурсы с абсолютными путями вместо относительного, вы будете в порядке.

+0

Большое спасибо за помощь. Он отлично работал. Я добавил дополнительные /? до окончания $, чтобы разрешить оба URL (с или без final /) работать! Теперь я исправлю этот вопрос об абсолютных и относительных путях. Как вы думаете, можно ли это решить, используя относительные пути и создав дополнительный rewriteRule? Например, когда есть два параметра, папка активов/переписана в соответствии с путями? – TheJals

+0

SOLVED - я исправил проблему, используя html tag :) Спасибо за вашу помощь! – TheJals

+0

Пожалуйста, проверьте это сообщение: http://stackoverflow.com/questions/1889076/is-it-recommended-to-use-the-base-html-tag/1889898#1889898 – vitozev

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