【问题标题】:Exclude Subfolders from Rewrite rule htaccess从重写规则 htaccess 中排除子文件夹
【发布时间】:2015-03-21 11:51:58
【问题描述】:

我的网站上有一个博客页面,.htaccess 如下所示用于转换 SEO 友好 URL

RewriteRule ^([^/.]+)/?$ /blogdetail?prmn=$1 [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/$1 [L,R=301]

 # remove .php from URL
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.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$ /$1 [L,R=301] 

RewriteRule ^([^/.]+)/?$ /blogdetail?prmn=$1 [L]

ErrorDocument 404 /error-page
ErrorDocument 403 /error-page
ErrorDocument 500 /error-page

【问题讨论】:

  • 如果更改配置文件中语句的顺序会怎样?
  • 你能否显示完整的 .htaccess 问题
  • 我的 Htaccess 在 #RewriteRule ^admin($|/) - [L] RewriteRule ^([^/.]+)/?$ /blogdetail?prmn=$1 [L] ..那么你想如何更改订单
  • @Anubhava,添加了有问题的htaccess
  • 没有 Anubhava... 管理员没有 .htaccess

标签: .htaccess mod-rewrite url-rewriting


【解决方案1】:

我想还有一条规则可以处理/admin,但是因为您使用的是第二条规则,所以它永远不会达到该规则。使用条件来排除以 admin 开头的任何内容。另请注意,该规则会将其重写为/blogdetail?prmn=admin,因此在某处重写了更多内容。

RewriteCond %{REQUEST_URI} !^/(admin|blogdetail)
RewriteRule ^([^/.]+)/?$ /blogdetail?prmn=$1 [L]

【讨论】:

  • 这条规则现在在我的博客页面上给出 500 错误 .. 即在 http://example.com/blog
  • 嗯;那是因为它从一开始就没有用。 /blogdetail 匹配规则,所以它会一遍又一遍地匹配。我已经编辑了答案。
  • 这里现在我面临一个新的挑战.. 如果我有不止一个重写规则与blogdetail 相同,那么我是否需要像这样包含!^/(admin|blogdetail|example1page) 但它不起作用.. 如何处理那么
  • 如果你的意思是:/page1应该去/blogdetail?prmn=../page2应该去/blah?asdf=..,想想这个:apache怎么知道什么时候重写/blogdetail和什么时候重写为/blah。它没有。确保每个规则都有一个共同的前缀(例如 /blog/page1/news/page2)。然后你的内容组织得很好,很容易为它们制定规则。
  • 我没有得到你的通用前缀示例。你能详细说明一下吗?
猜你喜欢
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2010-12-22
  • 2016-05-08
  • 2017-07-31
  • 2012-08-20
相关资源
最近更新 更多