Как я могу использовать mod_rewrite, чтобы удалить строку запроса из моего URL? - PullRequest
0 голосов
/ 02 февраля 2012

Я новичок в mod_rewrite и мне нужна помощь, если это возможно.

это мой старый URL

www.mysite.com/web/page.php?c=categoryname

Мне нужно изменить его по адресу:

www.mysite.com/web/page/categoryname.html

Я использую этот код, но он не работает:

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

Как я могу исправить приведенный выше код, чтобы правильно переписать мои URL?РЕДАКТИРОВАТЬ:

Благодаря Ульриху Палха мне удается перенаправить HTML-файлы, но CSS, JS и т. Д. Не перенаправлены, и веб-сайт выглядит очень плохо, это код, который я использую сейчас, пока я не получу тоткто будет перенаправлять css тоже

 RewriteEngine On
    RewriteBase /web/

    #redirect www.mysite.com/web/page.php?c=categoryname to
    #www.mysite.com/web/page/categoryname.html
    #prevent internal redirect
    RewriteCond %{ENV:REDIRECT_STATUS} !200
    RewriteCond %{QUERY_STRING} (^|&)c=([^&]+)(&|$) [NC] 
    RewriteRule ^(page)\.php$ $1/%2.html? [NC,L,R=301]

    #rewrite www.mysite.com/web/page/categoryname.html to
    #www.mysite.com/web/page.php?c=categoryname 
    RewriteRule ^(page)/([-a-zA-Z0-9]+)\.html$ $1.php?c=$2 [L,NC]

Бамп, пожалуйста, помогите?

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Добавьте следующее в файл .htaccess в веб-каталоге вашего сайта, заменив приведенные выше правила.

RewriteEngine On
RewriteBase /web/

#do not process css/js etc
RewriteCond %{REQUEST_URI} \.(css|js|jpg|png) [NC] 
#alternatively you could skip all existing files. Comment previous line and uncomment next to do so
#RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

#redirect www.mysite.com/web/page.php?c=categoryname to
#www.mysite.com/web/page/categoryname.html
#prevent internal redirect
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{QUERY_STRING} (^|&)c=([^&]+)(&|$) [NC] 
RewriteRule ^(page)\.php$ $1/%2.html? [NC,L,R=301]

#rewrite www.mysite.com/web/page/categoryname.html to
#www.mysite.com/web/page.php?c=categoryname 
RewriteRule ^(page)/([-a-zA-Z0-9]+)\.html$ $1.php?c=$2 [L,NC]
1 голос
/ 02 февраля 2012

Ваше правило в правиле неверно & mdash; вы пропускаете /page, добавляете дополнительную косую черту, которой вам не следует, и забывает удалить часть .html. Кроме того, у вашего RewriteBase не должно быть последнего слеша, а у вашего правила не должно быть начального слеша.

Итого, должно быть так:

RewriteEngine on
RewriteBase /web  
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^page/([^/]+)\.html$ page.php?c=$1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...