RewriteCond 贪婪匹配
RewriteCond matches greedily
我有一个 RewriteCond 来在环境变量中设置当前工作目录,如下所示:
RewriteCond [=10=]#%{REQUEST_URI} ([^#]*)#(.*?/)$
RewriteRule ^(.*)$ - [E=CWD:%2]
在这两条规则之上,我有一个单独的规则来重写。
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,QSA]
总的来说,我的 .htaccess 部分看起来像:
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,QSA]
RewriteCond [=12=]#%{REQUEST_URI} ([^#]*)#(.*?/)$
RewriteRule ^(.*)$ - [E=CWD:%2]
对于REQUEST_URI:
/es/website-design/do-it-yourself-website-builder.php
CWD 设置为值“/es/”
但对于 REQUEST_URI :
/de/website-design/do-it-yourself-website-builder.php
CWD 设置为值'/de/website-design/'
理想情况下,CWD 应在上述情况下存储基本文件夹名称(分别为“/es/”和“/de/”)。
这里出了什么问题?我现在坚持这个很长一段时间了。
请帮忙。
我的 .htaccess 文件的内容:
RewriteEngine On
RewriteBase /
RewriteCond !^(index\.php)
RewriteRule ^(shop)/(.*)$ [NC,QSA]
RewriteCond %{THE_REQUEST} ^.*/(shop)/index\.php
RewriteRule ^(.*)index.php$ / [R=301,QSA,L]
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,QSA]
# following tweak done for running supersite from within a folder
# for ever request url , this rule will match out the base folder
# name and capture it in the regex rule given in RewriteCond
RewriteCond [=15=]#%{REQUEST_URI} ([^#]*)#(.*?/)$
RewriteRule ^(.*)$ - [E=CWD:%2]
# Preventing Hot Linking of images
#RewriteCond %{REQUEST_URI} ^\/getImage\.php [NC]
#RewriteCond %{HTTP_REFERER} !^.*(manage.bigrock.in|manage.bigrock.com).*$ [NC]
#RewriteCond %{REQUEST_URI} .*\.css$ [NC,OR]
#RewriteCond %{REQUEST_URI} .*\.js$ [NC,OR]
#RewriteCond %{QUERY_STRING} !^src\=favicon\.ico$ [NC]
#RewriteCond %{HTTP_REFERER} ^http://([^/]+) [OR]
#RewriteCond %{HTTP_REFERER} ^$
#RewriteCond %{HTTP_HOST}<>%1 !^(.+)<>$ [NC]
#RewriteRule ^(.*)$ /noimage.html [Last]
RewriteCond %{HTTP_USER_AGENT} ^GlobalSign-Approver
RewriteRule ^(.*)$ cloudflare.html [L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^/onlinepayment/(.*)$ https://%{HTTP_HOST}/onlinepayment/ [NC,QSA]
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^index\.php$ / [R=301,QSA,L]
RewriteCond %{REQUEST_FILENAME} (S|s)itemap.xml
RewriteRule ^(.*)$ /seo-files.php?type=sitemap [L]
RewriteCond %{REQUEST_FILENAME} ror.xml
RewriteRule ^(.*)$ /seo-files.php?type=ror [L]
RewriteCond %{REQUEST_FILENAME} urllist.txt
RewriteRule ^(.*)$ /seo-files.php?type=urllist [L]
# Robots.txt redirection to robots.php
RewriteRule ^robots.txt robots.php [L,NC]
# URL rewriting
RewriteRule ^domain-registration-pricing$ /domain-registration/domain-registration-price.php [R=302,L,NC,QSA]
RewriteRule ^domain-registration/transfer/index.php /domain.php?action=domain_transfer&bypass_url_mapper=false [L,NC,QSA]
RewriteCond %{QUERY_STRING} ^idn
RewriteRule .*domain-registration/index.php /domain-registration/idn? [R=301,L]
RewriteRule ^promos.php /content.php?action=promos [L,NC,QSA]
RewriteRule ^website-design/index.php /sitebuilder.php?type=sblite&bypass_url_mapper=false [L,NC,QSA]
#RewriteRule ^website-design/do-it-yourself-website-builder.php %{ENV:CWD}website-design/index.php? [R=301,L,NC]
RewriteRule ^website-design/web-design-service.php /website-design/index.php [R=301,L,NC,QSA]
RewriteRule ^website-design/(.*).js$ /.js [L,NC,QSA]
RewriteRule ^website-builder.php$ /website-design/index.php [R=301,L,NC,QSA]
RewriteRule ^do-it-yourself.php$ /website-design/index.php [R=301,L,NC,QSA]
RewriteRule ^build-it-for-me.php$ /website-design/index.php [R=301,L,NC,QSA]
RewriteRule ^combo-offers /product-bundle.php [L,NC,QSA]
RewriteRule ^express-cart[/]{0,1}([a-zA-Z0-9_]*)[/]{0,1}$ /quickbuy.php?action= [L,NC,QSA]
RewriteRule ^express-cart[/]{0,1}([a-zA-Z0-9_]*)[/]{1}([a-zA-Z0-9_]*)[/]{0,1}$ /quickbuy.php?action=_ [L,NC,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /urlmapper.php [L,QSA]
确保每个规则都有 L
标志,例如
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,QSA]
应该是
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,L,QSA]
然后彻底清除浏览器缓存。
Env 变量 CWD
应始终作为 /
出现,因为 htaccess 直接放置在站点根目录中。
我有一个 RewriteCond 来在环境变量中设置当前工作目录,如下所示:
RewriteCond [=10=]#%{REQUEST_URI} ([^#]*)#(.*?/)$
RewriteRule ^(.*)$ - [E=CWD:%2]
在这两条规则之上,我有一个单独的规则来重写。
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,QSA]
总的来说,我的 .htaccess 部分看起来像:
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,QSA]
RewriteCond [=12=]#%{REQUEST_URI} ([^#]*)#(.*?/)$
RewriteRule ^(.*)$ - [E=CWD:%2]
对于REQUEST_URI:
/es/website-design/do-it-yourself-website-builder.php
CWD 设置为值“/es/”
但对于 REQUEST_URI :
/de/website-design/do-it-yourself-website-builder.php
CWD 设置为值'/de/website-design/'
理想情况下,CWD 应在上述情况下存储基本文件夹名称(分别为“/es/”和“/de/”)。
这里出了什么问题?我现在坚持这个很长一段时间了。
请帮忙。
我的 .htaccess 文件的内容:
RewriteEngine On
RewriteBase /
RewriteCond !^(index\.php)
RewriteRule ^(shop)/(.*)$ [NC,QSA]
RewriteCond %{THE_REQUEST} ^.*/(shop)/index\.php
RewriteRule ^(.*)index.php$ / [R=301,QSA,L]
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,QSA]
# following tweak done for running supersite from within a folder
# for ever request url , this rule will match out the base folder
# name and capture it in the regex rule given in RewriteCond
RewriteCond [=15=]#%{REQUEST_URI} ([^#]*)#(.*?/)$
RewriteRule ^(.*)$ - [E=CWD:%2]
# Preventing Hot Linking of images
#RewriteCond %{REQUEST_URI} ^\/getImage\.php [NC]
#RewriteCond %{HTTP_REFERER} !^.*(manage.bigrock.in|manage.bigrock.com).*$ [NC]
#RewriteCond %{REQUEST_URI} .*\.css$ [NC,OR]
#RewriteCond %{REQUEST_URI} .*\.js$ [NC,OR]
#RewriteCond %{QUERY_STRING} !^src\=favicon\.ico$ [NC]
#RewriteCond %{HTTP_REFERER} ^http://([^/]+) [OR]
#RewriteCond %{HTTP_REFERER} ^$
#RewriteCond %{HTTP_HOST}<>%1 !^(.+)<>$ [NC]
#RewriteRule ^(.*)$ /noimage.html [Last]
RewriteCond %{HTTP_USER_AGENT} ^GlobalSign-Approver
RewriteRule ^(.*)$ cloudflare.html [L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^/onlinepayment/(.*)$ https://%{HTTP_HOST}/onlinepayment/ [NC,QSA]
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^index\.php$ / [R=301,QSA,L]
RewriteCond %{REQUEST_FILENAME} (S|s)itemap.xml
RewriteRule ^(.*)$ /seo-files.php?type=sitemap [L]
RewriteCond %{REQUEST_FILENAME} ror.xml
RewriteRule ^(.*)$ /seo-files.php?type=ror [L]
RewriteCond %{REQUEST_FILENAME} urllist.txt
RewriteRule ^(.*)$ /seo-files.php?type=urllist [L]
# Robots.txt redirection to robots.php
RewriteRule ^robots.txt robots.php [L,NC]
# URL rewriting
RewriteRule ^domain-registration-pricing$ /domain-registration/domain-registration-price.php [R=302,L,NC,QSA]
RewriteRule ^domain-registration/transfer/index.php /domain.php?action=domain_transfer&bypass_url_mapper=false [L,NC,QSA]
RewriteCond %{QUERY_STRING} ^idn
RewriteRule .*domain-registration/index.php /domain-registration/idn? [R=301,L]
RewriteRule ^promos.php /content.php?action=promos [L,NC,QSA]
RewriteRule ^website-design/index.php /sitebuilder.php?type=sblite&bypass_url_mapper=false [L,NC,QSA]
#RewriteRule ^website-design/do-it-yourself-website-builder.php %{ENV:CWD}website-design/index.php? [R=301,L,NC]
RewriteRule ^website-design/web-design-service.php /website-design/index.php [R=301,L,NC,QSA]
RewriteRule ^website-design/(.*).js$ /.js [L,NC,QSA]
RewriteRule ^website-builder.php$ /website-design/index.php [R=301,L,NC,QSA]
RewriteRule ^do-it-yourself.php$ /website-design/index.php [R=301,L,NC,QSA]
RewriteRule ^build-it-for-me.php$ /website-design/index.php [R=301,L,NC,QSA]
RewriteRule ^combo-offers /product-bundle.php [L,NC,QSA]
RewriteRule ^express-cart[/]{0,1}([a-zA-Z0-9_]*)[/]{0,1}$ /quickbuy.php?action= [L,NC,QSA]
RewriteRule ^express-cart[/]{0,1}([a-zA-Z0-9_]*)[/]{1}([a-zA-Z0-9_]*)[/]{0,1}$ /quickbuy.php?action=_ [L,NC,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /urlmapper.php [L,QSA]
确保每个规则都有 L
标志,例如
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,QSA]
应该是
RewriteRule ^(?!ui?)([a-zA-Z]{2})/(.*)$ ?language= [NC,L,QSA]
然后彻底清除浏览器缓存。
Env 变量 CWD
应始终作为 /
出现,因为 htaccess 直接放置在站点根目录中。