使用 htaccess 重写条件请求
rewriteCond request with htaccess
我想完成以下任务(重写而不是重定向):
searchPage.php?crs_category=variable
喜欢 searchPage.php?crs_category=business
到 category/business
或 category/business/
不区分大小写
也可以直接访问category/name
,是searchPage
的重写
index.php/name
到 page/name
不区分大小写。请注意,这是重写而不是重定向,我想使用干净的 url. 访问 index.php/name
也可以直接访问page/name
,这是index.php/name
的重写
注意:
- 它需要考虑 spaces 例如如果用户点击 searchPage.php?crs_category=html%20and%css
它会将 url 重写为 category/html and css
尝试过:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} /searchPage.php\?crs_category=([^\s]+) [NC]
RewriteRule ^category/%1? [NE,NC,R,L]
RewriteRule ^category/([^/]+)/?$ /searchPage.php?crs_category= [QSA,L,NC]
RewriteCond %{THE_REQUEST} /index\.php/(\S+) [NC]
RewriteRule ^ /page/%1 [NE,R,L]
RewriteRule ^page/([^/]+)/?$ index.php/ [NC,L]
问题:
由于某种原因,该请求不适用于这些行:
RewriteCond %{THE_REQUEST} /searchPage.php\?crs_category=([^\s]+) [NC]
RewriteRule ^category/%1? [NE,NC,R,L]
另外,我不清楚谁兼顾了小白space。如果它的 searchPage.php?crs_category=html%20andcss
它导致 category/html 和 css 而忽略间距代码
更新:
Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /
# keep replacing space to hyphen until there is no space use internal rewrite
RewriteRule ^([^\s%20]*)[\s%20]+(.*)$ - [E=NOSPACE:1]
# when there is no space make an external redirection
RewriteCond %{ENV:NOSPACE} =1
RewriteRule ^([^\s%20]+)$ [R=301,L]
RewriteCond %{THE_REQUEST} /searchPage\.php\?crs_category=([^&]+?)\s [NC]
RewriteRule ^ category/%1? [NE,R,L]
RewriteCond %{THE_REQUEST} /index\.php/(\S+) [NC]
RewriteRule ^ page/%1 [NE,R,L]
RewriteRule ^category/([^/]+)/?$ searchPage.php?crs_category= [QSA,L,NC]
RewriteRule ^page/([^/]+)/?$ index.php/ [NC,L]
您应该在 index.php
之后匹配 /
而不是 ?
:
您可以使用这些规则:
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} /searchPage\.php\?crs_category=([^&]+?)\s [NC]
RewriteRule ^ category/%1? [NE,R,L]
RewriteCond %{THE_REQUEST} /index\.php/(\S+) [NC]
RewriteRule ^ page/%1 [NE,R,L]
# keep replacing space to hyphen until there is no space use internal rewrite
RewriteRule ^(\S*)\s+(.*)$ - [E=NOSPACE:1,DPI]
# when there is no space make an external redirection
RewriteCond %{ENV:NOSPACE} =1
RewriteRule ^(\S+)$ [NE,R=302,L]
RewriteRule ^category/([^/]+)/?$ searchPage.php?crs_category= [QSA,L,NC]
RewriteRule ^page/([^/]+)/?$ index.php/ [NC,L]
我想完成以下任务(重写而不是重定向):
searchPage.php?crs_category=variable
喜欢searchPage.php?crs_category=business
到category/business
或category/business/
不区分大小写
也可以直接访问category/name
,是searchPage
index.php/name
到page/name
不区分大小写。请注意,这是重写而不是重定向,我想使用干净的 url. 访问
index.php/name
也可以直接访问page/name
,这是index.php/name
注意:
- 它需要考虑 spaces 例如如果用户点击 searchPage.php?crs_category=html%20and%css
它会将 url 重写为 category/html and css
尝试过:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} /searchPage.php\?crs_category=([^\s]+) [NC]
RewriteRule ^category/%1? [NE,NC,R,L]
RewriteRule ^category/([^/]+)/?$ /searchPage.php?crs_category= [QSA,L,NC]
RewriteCond %{THE_REQUEST} /index\.php/(\S+) [NC]
RewriteRule ^ /page/%1 [NE,R,L]
RewriteRule ^page/([^/]+)/?$ index.php/ [NC,L]
问题: 由于某种原因,该请求不适用于这些行:
RewriteCond %{THE_REQUEST} /searchPage.php\?crs_category=([^\s]+) [NC]
RewriteRule ^category/%1? [NE,NC,R,L]
另外,我不清楚谁兼顾了小白space。如果它的 searchPage.php?crs_category=html%20andcss
它导致 category/html 和 css 而忽略间距代码
更新:
Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /
# keep replacing space to hyphen until there is no space use internal rewrite
RewriteRule ^([^\s%20]*)[\s%20]+(.*)$ - [E=NOSPACE:1]
# when there is no space make an external redirection
RewriteCond %{ENV:NOSPACE} =1
RewriteRule ^([^\s%20]+)$ [R=301,L]
RewriteCond %{THE_REQUEST} /searchPage\.php\?crs_category=([^&]+?)\s [NC]
RewriteRule ^ category/%1? [NE,R,L]
RewriteCond %{THE_REQUEST} /index\.php/(\S+) [NC]
RewriteRule ^ page/%1 [NE,R,L]
RewriteRule ^category/([^/]+)/?$ searchPage.php?crs_category= [QSA,L,NC]
RewriteRule ^page/([^/]+)/?$ index.php/ [NC,L]
您应该在 index.php
之后匹配 /
而不是 ?
:
您可以使用这些规则:
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} /searchPage\.php\?crs_category=([^&]+?)\s [NC]
RewriteRule ^ category/%1? [NE,R,L]
RewriteCond %{THE_REQUEST} /index\.php/(\S+) [NC]
RewriteRule ^ page/%1 [NE,R,L]
# keep replacing space to hyphen until there is no space use internal rewrite
RewriteRule ^(\S*)\s+(.*)$ - [E=NOSPACE:1,DPI]
# when there is no space make an external redirection
RewriteCond %{ENV:NOSPACE} =1
RewriteRule ^(\S+)$ [NE,R=302,L]
RewriteRule ^category/([^/]+)/?$ searchPage.php?crs_category= [QSA,L,NC]
RewriteRule ^page/([^/]+)/?$ index.php/ [NC,L]