2016-03-07 2 views
1
# Do not remove this line or mod_rewrite rules and search engine friendly URLs will stop working 

Options +FollowSymLinks 
RewriteEngine On 

# Removes index.php from ExpressionEngine URLs 
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] 
RewriteCond %{REQUEST_URI} !/system/.* [NC] 
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] 

# Directs all EE web requests through the site index file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 

# Redirect www to non-www 
RewriteBase/
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

#--Redirect from "/?page=foo" to "/page/foo"--# 
RewriteCond %{THE_REQUEST} /\?page=([^\s]+) [NC] 
RewriteRule^/page/%1? [NC,L,R] 
#--Rewrite "/page/foo/" to "/?page=foo"--# 
RewriteRule ^page/([^/]+)/?$ /?page=$1 [NC,L,QSA] 

#--Redirect from "/search.php?search=foo" to "/search/foo"--# 
RewriteCond %{THE_REQUEST} /search\.php\?search=([^\s]+) [NC] 
RewriteRule^/search/%1? [NC,L,R] 
#--Rewrite "/search/foo/" to "/search.php?search=foo"--# 
RewriteRule ^search/([^/]+)/?$ /search.php?search=$1 [NC,L,QSA] 

#--Redirect from "/search.php?search=foo&page=bar" to "/search/foo/page/bar"--# 
RewriteCond %{THE_REQUEST} /search\.php\?search=([^&]+)&page=([^\s]+) [NC] 
RewriteRule^/search/%1/page/%2? [NC,L,R] 
#--Rewrite "/search/foo/page/bar" to "/search.php?search=foo&page=bar"--# 
RewriteRule ^search/([^/]+)/page/([^/]+)/?$ /search.php?search=$1&page=$2 [NC,L,QSA] 

#--Redirect from "/post.php?id_post=foo" to "/post/foo"--# 
RewriteCond %{THE_REQUEST} /post\.php\?id_post=([^\s]+) [NC] 
RewriteRule^/post/%1? [NC,L,R] 
#--Rewrite "/post/foo/" to "/post.php?id_post=foo"--# 
RewriteRule ^post/([^/]+)/?$ /post.php?id_post=$1 [NC,L,QSA] 

# Support new SEO-friendly URLs 
RewriteRule page/(.*) ?page=$1 
RewriteRule search/(.*) search.php?search=$1 
RewriteRule search/(.*)/page/(.*) search.php?search=$1&page=$2 
RewriteRule post/(.*) post.php?id_post=$1 

Это мой файл и его работает нормально, но по некоторым причинам это одна:.htaccess RewriteRule Weird ошибка

#--Redirect from "/search.php?search=foo&page=bar" to "/search/foo/page/bar"--# 
RewriteCond %{THE_REQUEST} /search\.php\?search=([^&]+)&page=([^\s]+) [NC] 
RewriteRule^/search/%1/page/%2? [NC,L,R] 
#--Rewrite "/search/foo/page/bar" to "/search.php?search=foo&page=bar"--# 
RewriteRule ^search/([^/]+)/page/([^/]+)/?$ /search.php?search=$1&page=$2 [NC,L,QSA] 

Ее не работает, как это должно было бы сделать по этой ссылке:

search.php?search=$1&page=$2 

в

search/search/$1/page/$2 

но результат этого:

search/search/$1&page=$2 

Скажите мне, почему это происходит, пожалуйста, уже пробовал много вещей и все еще не мог заставить его работать.

Спасибо в продвинутом состоянии.

ответ

1

Ваши правила не в правильном порядке. Правило, как это:

RewriteCond %{THE_REQUEST} /search\.php\?search=([^\s]+) [NC] 
RewriteRule^/search/%1? [NC,L,R] 

будет соответствовать запросам как /search.php?search=blah, а также /search.php?search=blah&page=foo. Потому что нет ничего, что остановило бы конец матча в состоянии. Поэтому вам нужно поставить более подробное соответствие перед более общим. Это тоже касается всех ваших правил ?page=XXX.

Кроме того, ваше правило маршрутизации:

# Directs all EE web requests through the site index file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 

должно быть в самом конце, а не до и правила, которые перенаправляют.

Итак:

# Do not remove this line or mod_rewrite rules and search engine friendly URLs will stop working 

Options +FollowSymLinks 
RewriteEngine On 

# Removes index.php from ExpressionEngine URLs 
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] 
RewriteCond %{REQUEST_URI} !/system/.* [NC] 
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] 

# Redirect www to non-www 
RewriteBase/
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

#--Redirect from "/?page=foo" to "/page/foo"--# 
RewriteCond %{THE_REQUEST} /\?page=([^\s]+) [NC] 
RewriteRule^/page/%1? [NC,L,R] 
#--Rewrite "/page/foo/" to "/?page=foo"--# 
RewriteRule ^page/([^/]+)/?$ /?page=$1 [NC,L,QSA] 

#--Redirect from "/search.php?search=foo&page=bar" to "/search/foo/page/bar"--# 
RewriteCond %{THE_REQUEST} /search\.php\?search=([^&]+)&page=([^\s]+) [NC] 
RewriteRule^/search/%1/page/%2? [NC,L,R] 
#--Rewrite "/search/foo/page/bar" to "/search.php?search=foo&page=bar"--# 
RewriteRule ^search/([^/]+)/page/([^/]+)/?$ /search.php?search=$1&page=$2 [NC,L,QSA] 

#--Redirect from "/search.php?search=foo" to "/search/foo"--# 
RewriteCond %{THE_REQUEST} /search\.php\?search=([^\s]+) [NC] 
RewriteRule^/search/%1? [NC,L,R] 
#--Rewrite "/search/foo/" to "/search.php?search=foo"--# 
RewriteRule ^search/([^/]+)/?$ /search.php?search=$1 [NC,L,QSA] 

#--Redirect from "/post.php?id_post=foo" to "/post/foo"--# 
RewriteCond %{THE_REQUEST} /post\.php\?id_post=([^\s]+) [NC] 
RewriteRule^/post/%1? [NC,L,R] 
#--Rewrite "/post/foo/" to "/post.php?id_post=foo"--# 
RewriteRule ^post/([^/]+)/?$ /post.php?id_post=$1 [NC,L,QSA] 

# Support new SEO-friendly URLs 
RewriteRule page/(.*) ?page=$1 
RewriteRule search/(.*) search.php?search=$1 
RewriteRule search/(.*)/page/(.*) search.php?search=$1&page=$2 
RewriteRule post/(.*) post.php?id_post=$1 

# Directs all EE web requests through the site index file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L]