首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.htaccess重写php分页

.htaccess重写php分页
EN

Stack Overflow用户
提问于 2013-02-02 20:22:59
回答 1查看 4.7K关注 0票数 3

我已经审查过这个主题的多个线程,但是它们都在处理多个参数,me是一个非常新的带有.htaccess的,我无法想出如何修改答案以满足我的需要。

我正在使用.htaccess重写URL,除了尝试重写分页URL之外,一切似乎都进行得很顺利。

我的分页url非常简单: blog.php?page=2,但由于某种原因,我不能将url重写到/blog/page/2。当我试图将它路由到那个URL时,我会得到一个“内部服务器错误”。现在,我已经将它重写到/blog-page/2,这是可以的,但我更愿意使用它/blog/page/2。

我的.htaccess文件中有很多事情要做,所以我只会发布重写:

代码语言:javascript
复制
RewriteEngine On

# Full path
#RewriteBase /

# Rewrite all php files    
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

# Rewrite the user profile pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^user/([a-zA-Z0-9_-]+)$ profile.php?user=$1
RewriteRule ^user/([a-zA-Z0-9_-]+)/$ profile.php?user=$1

# Rewrite the company profile pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^company/([a-zA-Z0-9_-]+)$ employer.php?user=$1
RewriteRule ^company/([a-zA-Z0-9_-]+)/$ employer.php?user=$1

# Rewrite the blog post pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^post/([a-zA-Z0-9_-]+)$ entry.php?id=$1
RewriteRule ^post/([a-zA-Z0-9_-]+)/$ entry.php?id=$1

# Rewrite the job listing pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^job/([a-zA-Z0-9_-]+)$ listing.php?id=$1
RewriteRule ^job/([a-zA-Z0-9_-]+)/$ listing.php?id=$1

# Rewrite blog pagination
RewriteRule ^blog/page/([0-9]+)$ blog.php?page=$1 
RewriteRule ^blog/page/([0-9]+)/$ blog.php?page=$1  

显然,我遇到的问题是为博客分页的最终重写规则。为什么我不能做它/博客/页/2,但我可以使它/博客-页/2?

我还试图对博客类别和工作类别进行多页.htaccess重写,但我始终得到一个内部错误。我要为博客重写一次,工作类别和博客类别。以下是我对此的看法:

代码语言:javascript
复制
# Rewrite the category queries
RewriteRule ^/category/(.*)/?$ /$.php?cat=$1 [L,QSA]

可以让这个分页重写两个不同的页面吗?比如blogs.php和jobs.php?

另外,在我制定重写规则之前,是否有必要继续放置RewriteCond %{REQUEST_FILENAME} !-f?还是一次就够了?

EN

回答 1

Stack Overflow用户

发布于 2013-02-07 07:12:27

您检查了apache错误日志以获得错误消息的信息吗?如果不是的话,无论何时收到500条内部错误消息,这都是第一个开始。

看看apache手册中的RewriteCond。看起来,您希望RewriteCond适用于多个规则,但这不是它的工作方式。RewriteCond只适用于下一个RewriteRule。您可以将多个RewriteCond行链接到一个RewriteRule中,但是如果要将RewriteCond应用于RewriteRules,则必须将其放在每个RewriteRules之前。

好消息是,大多数规则不需要RewriteCond:

代码语言:javascript
复制
RewriteEngine On

# Rewrite all php files    
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

# Rewrite the user profile pages
RewriteRule ^user/([a-zA-Z0-9_-]+)/?$ profile.php?user=$1 [L]

RewriteCond 
# Rewrite the company profile pages
RewriteRule ^company/([a-zA-Z0-9_-]+)/?$ employer.php?user=$1 [L]

# Rewrite the blog post pages
RewriteRule ^post/([a-zA-Z0-9_-]+)/?$ entry.php?id=$1 [L]

# Rewrite the job listing pages
RewriteRule ^job/([a-zA-Z0-9_-]+)/?$ listing.php?id=$1 [L]

# Rewrite blog pagination
RewriteRule ^blog/page/([0-9]+)/?$ blog.php?page=$1 [L]

我对你的规则做了一些修改:

  1. 删除了大多数RewriteCond规则。如果计划在任何目录中都有一些静态文件,则需要添加RewriteCond %{REQUEST_FILENAME} !-f规则才能为它们提供服务。
  2. 合并规则以处理尾随/通过添加一个?使斜杠成为可选的。
  3. 将L添加到规则中,以指示在找到和执行匹配后不需要运行其他规则。有关可用标志的更多详细信息,请查看Apache手册中的RewriteRule
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14666140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档