【问题标题】:.htaccess mod_rewrite not working. redirects to 404 error.htaccess mod_rewrite 不起作用。重定向到 404 错误
【发布时间】:2012-11-15 05:09:32
【问题描述】:

我正在为一个将博客/新闻页面作为其网站一部分的客户开展一个项目。这一切都很好,但是他们要求他们有自定义永久链接而不是标准问题 php 变量。

我使用了 searchfriendlyurls.com 上的生成器来创建重写规则。我已将此添加到位于网站根文件夹中的 .htaccess 文件中,但是当我单击该链接时,它只会将我发送到我的主机 404 错误页面。有什么建议么。 .htaccess 文件如下:

Options -Multiviews

RewriteEngine On
RewriteBase /

# Force search engines to use domain.example.org.uk
RewriteCond %{HTTP_HOST} !^domain\.example\.org\.uk$
RewriteRule ^(.*) http://domain.example.org.uk/$1 [R=301,L]

# Specify search friendly URLs
RewriteRule ^media/news/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L]

# Generated for free at SearchFriendlyURLs.com

任何建议将不胜感激

【问题讨论】:

  • 你能补充一些例子吗,你点击的是哪个链接?
  • 将我带到文章页面的链接在主页上,目前链接到干净的“漂亮”网址。

标签: php .htaccess mod-rewrite


【解决方案1】:

添加另一个正则表达式变体:

RewriteRule ^media/news/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L]

例如对于 URL 路径:/media/news/2012/11/test-article/1

如果启用,重写日志将显示:

[rid#7f920b4b00a0/initial] (3) [perdir /srv/www/htdocs/] applying pattern '^media/news/([^/]+)/([^/]+)/([^/]+)/([^/]+)$' to uri 'media/news/2012/11/test-article/1'
[rid#7f920b4b00a0/initial] (2) [perdir /srv/www/htdocs/] rewrite 'media/news/2012/11/test-article/1' -> '/media/news/article.php?article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1'
[rid#7f920b4b00a0/initial] (3) split uri=/media/news/article.php?article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1 -> uri=/media/news/article.php, args=article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1
[rid#7f920b4b00a0/initial] (2) [perdir /srv/www/htdocs/] trying to replace prefix /srv/www/htdocs/ with /
[rid#7f920b4b00a0/initial] (1) [perdir /srv/www/htdocs/] internal redirect with /media/news/article.php [INTERNAL REDIRECT]
[rid#7f920bcdda00/initial/redir#1] (3) [perdir /srv/www/htdocs/] strip per-dir prefix: /srv/www/htdocs/media/news/article.php -> media/news/article.php
[rid#7f920bcdda00/initial/redir#1] (3) [perdir /srv/www/htdocs/] applying pattern '^media/news/([^/]+)/([^/]+)/([^/]+)/([^/]+)$' to uri 'media/news/article.php'
[rid#7f920bcdda00/initial/redir#1] (1) [perdir /srv/www/htdocs/] pass through /srv/www/htdocs/media/news/article.php

【讨论】:

  • 您在浏览器中输入了什么网址?
  • 我在浏览器中输入了干净的 url 还是不行
  • 猜测您输入浏览器的 URL 格式与上述规则不匹配,因此除非您共享 URL 或至少是路径部分,否则我无能为力。
  • 首先,如果你输入: //domain.example.org.uk/media/news/article.php?article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1 你得到你的页面愿望?
【解决方案2】:

我注意到,根据您的查询 article.php?article_url_year=$1&article_url_month=$2,您的 article.php 可能期待 numbers,但是您的 RewriteRule RewriteRule ^media/ news/([a-z]+) 只会匹配字母。

尝试替换这一行:

RewriteRule ^media/news/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L]

有了这个:

RewriteRule ^media/news/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L]

然后看看它是否有效。

此代码仅允许:

  • 所有字母(大写和小写)。
  • 所有号码。
  • 破折号 (-)

【讨论】:

  • 我已尝试将表达式更改为您建议的表达式,但仍然无济于事...我能否澄清一下:将我带到文章页面的链接是否需要指向查询还是生成的url?
猜你喜欢
  • 2014-04-20
  • 2014-07-14
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
相关资源
最近更新 更多