从重写规则 htaccess 中排除子文件夹
Exclude Subfolders from Rewrite rule htaccess
我的网站上有一个博客页面,.htaccess 如下转换为 SEO 友好 URL
RewriteRule ^([^/.]+)/?$ /blogdetail?prmn= [L]
所以,我的 URL 变成了 http://example.com/title-of-blog
,它工作得很好,很棒,但我的客户今天报告说管理部分工作不正常,我检查后发现 URL由于上述规则,http://example.com/admin
正在转换为 http://example.com/admin?prmn=admin
。
我用谷歌搜索了如何从 Rewrite 中排除 admin
文件夹,然后我找到了下面的内容
RewriteRule ^admin($|/) - [L]
当我使用它然后当我输入 http://example.com/admin
然后我得到我在 htaccess 中定义的错误页面。
请帮忙。我的完整 Htaccess 如下
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^admin($|/) - [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php
RewriteRule ^index\.php$ / [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index
RewriteRule ^index\.php$ / [L,R=301]
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]
# remove .php from URL
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) \.php [L]
# restrict .php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /[^\ ]+\.php($|\ )
RewriteRule \.php$ / [F,L]
# remove .html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)\.html$ / [L,R=301]
RewriteRule ^([^/.]+)/?$ /blogdetail?prmn= [L]
ErrorDocument 404 /error-page
ErrorDocument 403 /error-page
ErrorDocument 500 /error-page
我想还有其他规则可以对 /admin
执行某些操作,但是因为您正在使用第二条规则,所以它永远不会达到该规则。使用条件来排除以 admin 开头的任何内容。另请注意,该规则会将其重写为 /blogdetail?prmn=admin
,因此某处会重写更多内容。
RewriteCond %{REQUEST_URI} !^/(admin|blogdetail)
RewriteRule ^([^/.]+)/?$ /blogdetail?prmn= [L]
我的网站上有一个博客页面,.htaccess 如下转换为 SEO 友好 URL
RewriteRule ^([^/.]+)/?$ /blogdetail?prmn= [L]
所以,我的 URL 变成了 http://example.com/title-of-blog
,它工作得很好,很棒,但我的客户今天报告说管理部分工作不正常,我检查后发现 URL由于上述规则,http://example.com/admin
正在转换为 http://example.com/admin?prmn=admin
。
我用谷歌搜索了如何从 Rewrite 中排除 admin
文件夹,然后我找到了下面的内容
RewriteRule ^admin($|/) - [L]
当我使用它然后当我输入 http://example.com/admin
然后我得到我在 htaccess 中定义的错误页面。
请帮忙。我的完整 Htaccess 如下
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^admin($|/) - [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php
RewriteRule ^index\.php$ / [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index
RewriteRule ^index\.php$ / [L,R=301]
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]
# remove .php from URL
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) \.php [L]
# restrict .php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /[^\ ]+\.php($|\ )
RewriteRule \.php$ / [F,L]
# remove .html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)\.html$ / [L,R=301]
RewriteRule ^([^/.]+)/?$ /blogdetail?prmn= [L]
ErrorDocument 404 /error-page
ErrorDocument 403 /error-page
ErrorDocument 500 /error-page
我想还有其他规则可以对 /admin
执行某些操作,但是因为您正在使用第二条规则,所以它永远不会达到该规则。使用条件来排除以 admin 开头的任何内容。另请注意,该规则会将其重写为 /blogdetail?prmn=admin
,因此某处会重写更多内容。
RewriteCond %{REQUEST_URI} !^/(admin|blogdetail)
RewriteRule ^([^/.]+)/?$ /blogdetail?prmn= [L]